我是Django测试中的新手。如何为此视图功能创建单元测试?我的单元测试功能应该从视图导入功能?请举个例子。这将有助于我理解它是如何工作的
@maintainance_job
def time_to_end(request):
today = datetime.date.today()
datas = Data.objects.filter(start__lte=today,
other_date__gte=today)
for data in datas:
subject = _(u'Send email')
body = render_to_string('mail.txt',
{'data': data})
email = EmailMessage(subject, body,
'admin@admin.com',
[data.user.email])
email.send()
return HttpResponse('Done')
网址:
(r'^maintainance/jobs/time_to_end/$', 'content.views.time_to_end'),
答案 0 :(得分:0)
对您的案例进行了最简单的测试(将其放在您的视图函数所在目录的tests.py中):
from django.utils import unittest
from django.test.client import Client
class HttpTester( unittest.TestCase ):
def setUp( self ):
self._client = Client() # init a client for local access to pages of your site
def test_time_to_end( self ):
response = self._client.get( '/jobs/time_to_end/' )
# response = self._client.post( '/jobs/time_to_end/' ) - a 'POST' request
result = response.content
assert result != 'Done'
因此,我们使用self._client来发出'get'和'post'请求。如果您使用模板并希望访问传递给模板的变量,则可以通过阅读response.content(响应的全文)或阅读response.context来访问响应。
例如,如果您的视图通常必须将带有上下文变量'result'的dict传递给模板:
{ 'result': "DONE" }
然后你可以查看你的结果:
result = response.context[ 'result' ]
assert result != 'Done'
所以,你等待你的测试将有'结果'变量,它将是'完成'。否则你引发AssertionError(注意断言语句)。
如果有异常,则测试失败。 AssertionError也是一个例外。
更多详细信息 - 在docs和书籍“Dive into Python”中。