19

我有一个应该基于 GET 值为表单字段设置初始值的视图。我想测试一下。我目前正在使用Django 的测试客户端,但我愿意查看其他工具。

编辑

抱歉,我没有提到我非常了解assertContains方法,但我希望除了在 HTML 中搜索input标签和value属性之外,还有更好的方法。

4

5 回答 5

34

讨厌回答我自己的问题(就像我第三次这样做)但是在与测试客户端嘲笑之后,我找到了一个更好的方法:

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')

有人看到这有什么问题吗?我先搁置一会,看看大家怎么想。

于 2010-11-22T19:29:43.430 回答
8

表格上接受的解决方案检查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)
于 2015-04-14T02:33:20.603 回答
2

该值将作为 <input value= 'whatever'/> 嵌入到 html 中。您可以使用您喜欢的任何工具搜索该字符串。

response = Client().get('/customer/details/')
print [line for line in response.split('\n') if line.find('<input') > -1]
于 2010-11-21T01:10:05.437 回答
1

我认为这个功能是 1.3 附带的,但它可能更早出现。我稍微修改了页面上的示例以满足您的要求,但它是未经测试的代码,我假设了一些东西,例如响应上下文的表单参数。根据需要进行修改。这个答案的重点是显示请求工厂。

http://docs.djangoproject.com/en/dev/topics/testing/#django.test.client.RequestFactory

from django.utils import unittest
from django.test.client import RequestFactory

class SimpleTest(unittest.TestCase):
    def setUp(self):
        # Every test needs access to the request factory.
        self.factory = RequestFactory()

    def test_details(self):
        get_param = 'some_value'
        # Create an instance of a GET request.
        request = self.factory.get('/customer/details/?param={0}'.format(get_param))

        # Test my_view() as if it were deployed at /customer/details
        response = my_view(request)

        # test 1
        form = response.form
        idx = form.as_p().find(get_param)
        self.assertNotEqual(idx, -1)            
        #or.. test 2
        self.assertContains(response, get_param)
于 2010-11-21T05:06:41.613 回答
0

如果您严格检查表单字段的初始值,另一种选择是测试您的表单:

表格.py

from django import forms

class MyForm(forms.Form):
    title = forms.CharField(initial='My Default Title')

test_forms.py

from django.test import TestCase
from .forms import MyForm

class MyFormTests(TestCase):
    def test_myform_initial_value(self):
        form = MyForm()
        self.assertEqual(form['title'].initial, 'My Default Title')
于 2018-04-12T16:58:00.037 回答