単体テストでMESSAGE_STORAGEに格納されたメッセージをチェックする方法

DjangoのThe Message Frameworkを使って格納されたメッセージを、django.test.client.Clientを使ったテストで確認する方法です。Djangoが実装している、django.test.testcases.TestCase.assertNotContainsを使うと、返ってきたレスポンスにメッセージが含まれているかを確認することができます。ただ、これは元々全く同じメッセージがレスポンスに含まれている場合など、正しくチェックすることができないかもしれません。もしかしたら、もっといいやり方があるのかもしれません。

メッセージをチェックする例:

—- views.py —-

from django import template
from django import shortcuts
from django.contrib import messages

def message(request):
    messages.add_message(request, messages.ERROR,
            u'An exception occurred')
    return shortcuts.render_to_response(‘index.html',
            context_instance=template.RequestContext(request))
—- test.py —-

import os
import unittest
os.environ[u'DJANGO_SETTINGS_MODULE'] = u'settings'
from django.test import testcases
from django.core import management
from django.test import client
from django.test import utils
import settings
utils.setup_test_environment()
management.setup_environ(settings)

class TestSample(testcases.TestCase):

    def setUp(self):
        self._client = client.Client()

    def test_message_01(self):
        response = self._client.get(‘/message/')
        self.assertContains(response, u'An exception occurred')

    def test_message_02(self):
        response = self._client.get(‘/message/')
        self.assertNotContains(response, u'There are no error messages.')

def main():
    loader = unittest.TestLoader()
    suite = unittest.TestSuite()
    suite.addTest(loader.loadTestsFromTestCase(TestSample))

結果:

test_message_01 (__main__.TestSample) … ok
test_message_02 (__main__.TestSample) … ok

———————————————————————————————————
Ran 2 tests in 0.331s

OK

この記事が役に立った場合、シェアしていただけると励みになります!!