我有一个视图,应该根据GET值为表单字段设置初始值。我想测试一下。我目前正在使用Django's test client,但我愿意看其他工具。
抱歉,我没有提到我很清楚assertContains方法,但我希望除了在HTML上搜索input
代码和{{1}之外,还有更好的方法} attribute。
答案 0 :(得分:23)
讨厌回答我自己的问题(就像第三次我做的那样),但在与测试客户进行嘲笑之后,我找到了一个更好的方法:
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')
有人看到这个有什么问题吗?我会把它放在一段时间看看人们的想法。
答案 1 :(得分:7)
表单上接受的解决方案检查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)
答案 2 :(得分:1)
该值将嵌入html中< input value ='whatever'/>。您可以使用您喜欢的任何工具搜索该字符串。
response = Client().get('/customer/details/')
print [line for line in response.split('\n') if line.find('<input') > -1]
答案 3 :(得分:0)
我认为此功能附带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)
答案 4 :(得分:0)
如果您严格检查表单字段的初始值,另一种方法是测试您的表单:
<强> forms.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')