0

我是 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'),
4

1 回答 1

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 发出“获取”和“发布”请求。可以通过读取 response.content(响应的全文)或通过读取 response.context(如果您使用模板并希望访问传递给模板的变量)来访问响应。

例如,如果您的视图通常必须将带有上下文变量 'result' 的 dict 传递给模板:

{ 'result': "DONE" }

然后你可以检查你的结果:

result = response.context[ 'result' ]           
assert result != 'Done'

所以,你等待你的测试将有“结果”变量,它将是“完成”。否则你会引发 AssertionError (注意 assert 语句)。

如果有异常,则测试失败。AssertionError 也是一个例外。

更多细节 - 在文档和一本书“潜入 Python ”中。

于 2013-03-19T16:52:12.850 回答