1. ホーム
  2. python

[解決済み] django のメッセージをユニットテストするには?

2023-05-05 03:26:55

質問

私のdjangoアプリケーションでは、私はアクションを実行し、次に応答でメッセージをチェックするユニットテストを記述しようとしています。

私が知る限りでは、これを行うための素晴らしい方法はありません。

CookieStorageのストレージメソッドを使っているのですが、以下のようなことをしたいのですが、どうすればよいでしょうか?

    response = self.client.post('/do-something/', follow=True)
    self.assertEquals(response.context['messages'][0], "fail.")

問題は、戻ってくるのは

print response.context['messages']
<django.contrib.messages.storage.cookie.CookieStorage object at 0x3c55250>

どうすればこれを有用なものに変えることができるでしょうか、それとも私のやり方が間違っているのでしょうか?

ありがとうございます。 ダニエル

どのように解決するのですか?

とても簡単な方法を見つけました。

response = self.client.post('/foo/')
messages = list(response.context['messages'])
self.assertEqual(len(messages), 1)
self.assertEqual(str(messages[0]), 'my message')

もし、コンテキストを持たないレスポンスに対してメッセージをチェックする必要がある場合は、以下を使用することができます。

from django.contrib.messages import get_messages
messages = list(get_messages(response.wsgi_request))
self.assertEqual(len(messages), 1)
self.assertEqual(str(messages[0]), 'my message')

フォールバックストレージはインデックス作成をサポートしませんが、イテラブルです。