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

URL:

(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 を使用して「get」および「post」リクエストを作成します。応答にアクセスするには、response.content (応答の全文) を読み取るか、テンプレートを使用してテンプレートに渡される変数にアクセスする場合は response.context を読み取ります。

たとえば、ビューが通常、コンテキスト変数 'result' を含む dict をテンプレートに渡す必要がある場合:

{ 'result': "DONE" }

次に、結果を確認できます。

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

したがって、テストが「結果」変数を持ち、「完了」するのを待ちます。そうしないと、AssertionError が発生します (assert ステートメントに注意してください)。

例外がある場合、テストは失敗します。AssertionError も例外です。

詳細 -ドキュメントおよび本「Dive into Python」。

于 2013-03-19T16:52:12.850 に答える