前提・実現したいこと
参考書を見つつ日記アプリを作成しております。
TestCaseクラスを使ったテストコードでログイン状態を作りたい
発生している問題・エラーメッセージ
テストコードを実行すると以下エラーが表示されます。
AssertionError: '/accounts/login/?next=%2Fdiary-create%2F' != '/diary-list' - /accounts/login/?next=%2Fdiary-create%2F + /diary-list : Response redirected to '/accounts/login/?next=/diary-create/', expected '/diary-list'Expected '/accounts/login/?next=/diary-create/' to equal '/diary-list'.
該当のソースコード
python
1from django.contrib.auth import get_user_model 2from django.test import TestCase 3from django.urls import reverse_lazy 4 5from ..models import Diary 6 7 8class LoggedInTestCase(TestCase): 9 """各テストクラスで共通の事前準備処理をオーバーライドした独自TestCaseクラス""" 10 11 def setUp(self): 12 """テストメソッド実行前の事前設定""" 13 14 # テストユーザーのパスワード 15 #self.password = 'user1234' 16 17 # 各インスタンスメソッドで使うテスト用ユーザーを生成し 18 # インスタンス変数に格納しておく 19 self.test_user = get_user_model().objects.create_user( 20 username='tester', 21 email='tester@codona.com', 22 password='user1234') 23 # テスト用ユーザーでログインする 24 self.client.login(email=self.test_user.email, password=self.test_user.password) 25 26 27class TestDiaryCreateView(LoggedInTestCase): 28 """DiaryCreateView用のテストクラス""" 29 30 def test_create_diary_success(self): 31 """日記作成処理が成功することを検証する""" 32 33 34 # Postパラメータ 35 params = {'title': 'テストタイトル', 36 'content': '本文', 37 'photo1': ''} 38 39 # 新規日記作成処理(Post)を実行 40 response = self.client.post(reverse_lazy('diary:diary_create'), params) 41 42 # 日記リストページへのリダイレクトを検証 43 self.assertRedirects(response, reverse_lazy('diary:diary_list')) 44 45 # 日記データがDBに登録されたかを検証 46 self.assertEqual(Diary.objects.filter(title='テストタイトル').count(), 1)
試したこと
エラーの内容でなぜURLが異なるのかを調べていたところ、該当のURL(/accounts/login/?next=/diary-create/)がログアウト時に遷移するURLであることがわかりました。ログイン時には/diary-listに遷移するはずが遷移しておりませんでした。
ネットを参照してみましたが具体的な情報が得られず、どのようにしたらログイン状態を作れるのかがわかりませんでした。
以下の部分でログインできるはずができていないようなのですが、どのようにしたらログインできるのでしょうか?
# テスト用ユーザーでログインする self.client.login(email=self.test_user.email, password=self.test_user.password)
補足情報(FW/ツールのバージョンなど)
Django:3.2.8
Python:3.9.7
OS:Windows11
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/05 22:11 編集