Django测试:测试表单字段的初始值
我有一个视图,它应该根据一个GET请求的值来设置表单字段的初始值。我想测试一下这个功能。目前我在使用Django的测试客户端,但我也愿意尝试其他工具。
补充说明
抱歉,我没有提到我知道assertContains这个方法,但我希望能找到一种更好的方法,而不是去搜索HTML中的input
标签和value
属性。
5 个回答
2
这个值会被嵌入到html代码中,显示为 <input value= 'whatever'/>。你可以用任何你喜欢的工具来搜索这个字符串。
response = Client().get('/customer/details/')
print [line for line in response.split('\n') if line.find('<input') > -1]
9
被接受的解决方案是检查表单中的 initial['...']
值,但你也可以检查字段上的实际值。下面是伪代码。
这样做很有帮助,特别是当你想测试一个直接来自模型的默认值(也就是说,form.initial 没有设置)时,同时也能确保 initial['...']
是实际的值。
def test_some_default_value(self):
response = self.client.get('/signup/')
self.assertEquals(response.context['form']['plan'].value(), my_value)
def test_some_default_value_2(self):
some_different_conditions...
response = self.client.get('/signup/')
self.assertEquals(response.context['form']['plan'].value(), a_different_value)
39
真不想自己回答自己的问题(这是我第三次这么做了),不过在玩弄测试客户端的时候,我发现了一种更好的方法:
def test_creating_stop(self):
c = self.client
# Check that name is pre-filled
response = c.get('%s?name=abcd' % reverse('add_new_stop'))
self.assertEqual(response.context['form'].initial['name'], 'abcd')
有人觉得这个有什么问题吗?我先放着看看大家的想法。