送信後にメッセージがユーザーに送信されるかどうかをテストしたい。私はdjango.contrib.messagesを使用しています。手動テスト (runserver) ではすべてが機能しているように見えますが、単体テストではメッセージが表示されません。
メッセージを格納するコード:
messages.success(request, _('Internationalized evil message.'))
メッセージをテストするコード:
from django.contrib.messages.api import get_messages
...
def test_message_should_sent_to_user(self):
"""After successful phone number submit, message should be displayed."""
response = self.client.post(
reverse('evil.views.evil_data_submit'), self.valid_data)
messages = get_messages(response.request)
self.assertNotEqual(len(messages), 0)
テストクライアントのポストメソッド呼び出し中にミドルウェアが呼び出されないようです。
@Tishoの回答後に更新
メッセージは で見つかるはずですresponse.context
。私の直感でさえ動作するはずですが、動作しません。import pdb; pdb.set_trace()
テスト中に呼び出されたかどうかを確認するために、django/contrib/messages/context_processors.py に配置しましたがclient.post
、そうではありません。
を再確認しましたがTEMPLATE_CONTEXT_PROCESSORS
、おそらく明日、何かを見逃していることに気付くでしょう。MIDDLEWARE_CLASSES
INSTALLED_APPS
重要な詳細
送信が成功した場合、ビューはHttpResponseRedirectを返すためresponse.context
、空であることを忘れていました。
解決
View はリダイレクト (コンテキスト データを持たない) を返しfollow=True
、client.post メソッド (@Tisho によって提案されたメソッド) に渡すことができることを解決します。