Django测试:测试表单字段的初始值

20 投票
5 回答
9600 浏览
提问于 2025-04-16 07:24

我有一个视图,它应该根据一个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')

有人觉得这个有什么问题吗?我先放着看看大家的想法。

撰写回答