質問編集履歴

6

本文修正

2022/10/12 13:43

投稿

deango
deango

スコア161

test CHANGED
File without changes
test CHANGED
@@ -30,15 +30,6 @@
30
30
  class TestDiaryUpdateView(LoggedInTestCase):
31
31
  """DiaryUpdateView用のテストクラス"""
32
32
 
33
- def _make_dummy_image(self):
34
- """テスト用の画像ファイルをPILで作成"""
35
- file_obj = io.BytesIO()
36
- im = Image.new('RGBA', size=(10, 10), color=(256, 0, 0))
37
- im.save(file_obj, 'png')
38
- file_obj.name = 'test.png'
39
- file_obj.seek(0)
40
- return file_obj
41
-
42
33
  def test_update_diary_success(self):
43
34
  """日記編集処理が成功することを検証する"""
44
35
 
@@ -50,9 +41,6 @@
50
41
  user=self.test_user,
51
42
  title='タイトル編集前',
52
43
  content='本文',
53
- photo1=SimpleUploadedFile(img.name, img.read(), content_type='image/png'),
54
- photo2='',
55
- photo3='',
56
44
  lat= 35.709,
57
45
  lon= 139.7319
58
46
  )
@@ -80,7 +68,7 @@
80
68
  user = models.ForeignKey('accounts.CustomUser', verbose_name='ユーザー', related_name='user', on_delete=models.PROTECT)
81
69
  title = models.CharField(verbose_name='タイトル', max_length=2200, blank=True, null=True)
82
70
  content = models.TextField(verbose_name='本文', max_length=2200, blank=True, null=True)
83
- photo1 = models.ImageField(verbose_name='写真1', blank=false, null=false)
71
+ photo1 = models.ImageField(verbose_name='写真1', blank=True, null=True)
84
72
  photo2 = models.ImageField(verbose_name='写真2', blank=True, null=True)
85
73
  photo3 = models.ImageField(verbose_name='写真3', blank=True, null=True)
86
74
  created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True)

5

コード修正

2022/10/12 13:40

投稿

deango
deango

スコア161

test CHANGED
File without changes
test CHANGED
@@ -80,7 +80,7 @@
80
80
  user = models.ForeignKey('accounts.CustomUser', verbose_name='ユーザー', related_name='user', on_delete=models.PROTECT)
81
81
  title = models.CharField(verbose_name='タイトル', max_length=2200, blank=True, null=True)
82
82
  content = models.TextField(verbose_name='本文', max_length=2200, blank=True, null=True)
83
- photo1 = models.ImageField(verbose_name='写真1', blank=True, null=True)
83
+ photo1 = models.ImageField(verbose_name='写真1', blank=false, null=false)
84
84
  photo2 = models.ImageField(verbose_name='写真2', blank=True, null=True)
85
85
  photo3 = models.ImageField(verbose_name='写真3', blank=True, null=True)
86
86
  created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True)

4

ソースコード変更

2022/10/12 10:45

投稿

deango
deango

スコア161

test CHANGED
File without changes
test CHANGED
@@ -80,7 +80,7 @@
80
80
  user = models.ForeignKey('accounts.CustomUser', verbose_name='ユーザー', related_name='user', on_delete=models.PROTECT)
81
81
  title = models.CharField(verbose_name='タイトル', max_length=2200, blank=True, null=True)
82
82
  content = models.TextField(verbose_name='本文', max_length=2200, blank=True, null=True)
83
- photo1 = models.ImageField(verbose_name='写真1', blank=False, null=False)
83
+ photo1 = models.ImageField(verbose_name='写真1', blank=True, null=True)
84
84
  photo2 = models.ImageField(verbose_name='写真2', blank=True, null=True)
85
85
  photo3 = models.ImageField(verbose_name='写真3', blank=True, null=True)
86
86
  created_at = models.DateTimeField(verbose_name='作成日時', auto_now_add=True)

3

本文修正

2022/10/12 10:28

投稿

deango
deango

スコア161

test CHANGED
File without changes
test CHANGED
@@ -18,14 +18,11 @@
18
18
  日記編集処理が成功することを検証する
19
19
  ----------------------------------------------------------------------
20
20
  Traceback (most recent call last):
21
- File "/usr/src/app/nyapu/diary/tests/test_views.py", line 126, in test_update_diary_success
21
+ File "/usr/src/app/nyapu/diary/tests/test_views.py", line 131, in test_update_diary_success
22
- self.assertRedirects(response, reverse_lazy('diary:diary_detail', kwargs={'pk': diary.pk}))
22
+ self.assertEqual(Diary.objects.filter(title='タイトル編集後').count(), 1)
23
- File "/usr/local/lib/python3.7/site-packages/django/test/testcases.py", line 360, in assertRedirects
24
- % (response.status_code, status_code)
23
+ AssertionError: 0 != 1
25
- AssertionError: 200 != 302 : Response didn't redirect as expected: Response code was 200 (expected 302)
26
24
 
27
25
  ----------------------------------------------------------------------
28
- ?
29
26
  ```
30
27
 
31
28
  ### 該当のソースコード
@@ -70,7 +67,8 @@
70
67
  response = self.client.post(reverse_lazy('diary:diary_update', kwargs={'pk': diary.pk}), params)
71
68
 
72
69
  # 日記詳細ページへのリダイレクトを検証
73
- self.assertRedirects(response, reverse_lazy('diary:diary_detail', kwargs={'pk': diary.pk}))
70
+ #self.assertRedirects(response, reverse_lazy('diary:diary_detail', kwargs={'pk': diary.pk}))
71
+ self.assertEqual(response.status_code, 200)
74
72
 
75
73
  # 日記データが編集されたかを検証
76
74
  self.assertEqual(Diary.objects.filter(title='タイトル編集後').count(), 1)

2

本文修正

2022/10/11 17:11

投稿

deango
deango

スコア161

test CHANGED
File without changes
test CHANGED
@@ -1,31 +1,37 @@
1
1
  ### 前提
2
2
  djangoで日記アプリを作成しています。
3
3
  ユニットテストを実施しており、日記の編集処理をテストしているのですが、
4
- 日記編集処理(Post)を実行後しても、編集がかかっていないエラーがでて困っています。
4
+ 日記編集処理(Post)を実行後しても、編集がかからず困っています。
5
5
 
6
- 実際に手で動かしたときは編集できております。
6
+ 実際に手で動かしたときは編集できてます。
7
7
 
8
8
  また、日記の作成処理と編集処理は同じフォームを使いまわしていますが、
9
9
  編集処理のみエラーが出ている状態です。
10
10
 
11
+ お力添えいただけますと幸いです。
11
12
 
12
13
  ### 発生している問題・エラーメッセージ
13
14
 
14
15
  ```
16
+ ======================================================================
17
+ FAIL: test_update_diary_success (diary.tests.test_views.TestDiaryUpdateView)
18
+ 日記編集処理が成功することを検証する
19
+ ----------------------------------------------------------------------
15
20
  Traceback (most recent call last):
16
- File "C:\WORK\python\venv_nyapu\nyapu_pj\diary\tests\test_views.py", line 105, in test_update_diary_success
21
+ File "/usr/src/app/nyapu/diary/tests/test_views.py", line 126, in test_update_diary_success
17
- self.assertEqual(Diary.objects.get(pk=diary.pk).title, 'タイトル編集後')
22
+ self.assertRedirects(response, reverse_lazy('diary:diary_detail', kwargs={'pk': diary.pk}))
23
+ File "/usr/local/lib/python3.7/site-packages/django/test/testcases.py", line 360, in assertRedirects
24
+ % (response.status_code, status_code)
18
- AssertionError: 'タイトル編集前' != 'タイトル編集後'
25
+ AssertionError: 200 != 302 : Response didn't redirect as expected: Response code was 200 (expected 302)
26
+
19
- - タイトル編集前
27
+ ----------------------------------------------------------------------
20
- ? ^
21
- + タイトル編集後
22
28
  ?
23
29
  ```
24
30
 
25
31
  ### 該当のソースコード
26
32
  ```test_views.py
27
- class TestDiaryCreateView(LoggedInTestCase):
33
+ class TestDiaryUpdateView(LoggedInTestCase):
28
- """DiaryCreateView用のテストクラス"""
34
+ """DiaryUpdateView用のテストクラス"""
29
35
 
30
36
  def _make_dummy_image(self):
31
37
  """テスト用の画像ファイルをPILで作成"""
@@ -36,37 +42,26 @@
36
42
  file_obj.seek(0)
37
43
  return file_obj
38
44
 
39
- def test_create_diary_success(self):
45
+ def test_update_diary_success(self):
40
- """日記作成処理が成功することを検証する"""
46
+ """日記編集処理が成功することを検証する"""
41
47
 
42
48
  # テスト用の画像ファイル
43
49
  img = self._make_dummy_image()
44
50
 
45
- # Postパラメータ
51
+ # テスト用日記データの作成
52
+ diary = Diary.objects.create(
53
+ user=self.test_user,
46
- params = {'title': 'テストタイトル',
54
+ title='タイトル編集前',
47
- 'content': '本文',
55
+ content='本文',
48
- 'photo1': SimpleUploadedFile(img.name, img.read(), content_type='image/png',),
56
+ photo1=SimpleUploadedFile(img.name, img.read(), content_type='image/png'),
49
- 'photo2': '',
57
+ photo2='',
50
- 'photo3': '',
58
+ photo3='',
51
- 'lat': 35.709,
59
+ lat= 35.709,
52
- 'lon': 139.7319,
60
+ lon= 139.7319
53
- }
61
+ )
54
-
55
- # 新規日記作成処理(Post)を実行
56
- response = self.client.post(reverse_lazy('diary:diary_create'), params)
57
-
58
- # 日記リストページへのリダイレクトを検証
59
- self.assertRedirects(response, reverse_lazy('diary:diary_list', kwargs={'username': self.test_user}))
60
62
 
61
63
  # 日記データがDBに登録されたかを検証
62
- self.assertEqual(Diary.objects.filter(title='テストタイトル').count(), 1)
64
+ self.assertEqual(Diary.objects.filter(title='タイトル編集前').count(), 1)
63
-
64
-
65
- def test_update_diary_success(self):
66
- """日記編集処理が成功することを検証する"""
67
-
68
- # テスト用日記データの作成
69
- diary = Diary.objects.create(user=self.test_user, title="タイトル編集前")
70
65
 
71
66
  # Postパラメータ
72
67
  params = {'title': 'タイトル編集後'}
@@ -74,11 +69,12 @@
74
69
  # 日記編集処理(Post)を実行
75
70
  response = self.client.post(reverse_lazy('diary:diary_update', kwargs={'pk': diary.pk}), params)
76
71
 
77
- # 日記詳細ページへのリダイレクト検証
72
+ # 日記詳細ページへのリダイレクト検証
78
- self.assertEqual(response.status_code, 200)
73
+ self.assertRedirects(response, reverse_lazy('diary:diary_detail', kwargs={'pk': diary.pk}))
79
74
 
80
75
  # 日記データが編集されたかを検証
81
- self.assertEqual(Diary.objects.get(pk=diary.pk).title, 'タイトル編集後')
76
+ self.assertEqual(Diary.objects.filter(title='タイトル編集後').count(), 1)
77
+
82
78
  ```
83
79
  ```models.py
84
80
  class Diary(models.Model):
@@ -151,7 +147,7 @@
151
147
  # 日記詳細ページへのリダイレクトの検証
152
148
  self.assertEqual(response.status_code, 200)
153
149
 
154
- assertRedirectsの場合、以下のエラーになったため、ステータスコード200のassertEqualに変更しました。
150
+ assertRedirectsの場合、以下のエラーになったため、上記のステータスコード200のassertEqualに変更しました。
155
151
  ```assertRedirectsの時のエラー
156
152
  FAIL: test_update_diary_success (diary.tests.test_views.TestDiaryUpdateView)
157
153
  日記編集処理が成功することを検証する

1

試したことの追記

2022/10/11 17:07

投稿

deango
deango

スコア161

test CHANGED
File without changes
test CHANGED
@@ -142,7 +142,27 @@
142
142
  },
143
143
  }
144
144
  ```
145
+ ### 試したこと
146
+ 以下のコードですが、もともとはassertRedirectsにしていました。
147
+ (修正前)
148
+    # 日記詳細ページへのリダイレクトを検証
149
+ self.assertRedirects(response, reverse_lazy('diary:diary_detail', kwargs={'pk': diary.pk}))
150
+ (修正後)
151
+ # 日記詳細ページへのリダイレクトの検証
152
+ self.assertEqual(response.status_code, 200)
145
153
 
154
+ assertRedirectsの場合、以下のエラーになったため、ステータスコード200のassertEqualに変更しました。
155
+ ```assertRedirectsの時のエラー
156
+ FAIL: test_update_diary_success (diary.tests.test_views.TestDiaryUpdateView)
157
+ 日記編集処理が成功することを検証する
158
+ ----------------------------------------------------------------------
159
+ Traceback (most recent call last):
160
+ File "/usr/src/app/nyapu/diary/tests/test_views.py", line 126, in test_update_diary_success
161
+ self.assertRedirects(response, reverse_lazy('diary:diary_detail', kwargs={'pk': diary.pk}))
162
+ File "/usr/local/lib/python3.7/site-packages/django/test/testcases.py", line 360, in assertRedirects
163
+ % (response.status_code, status_code)
164
+ AssertionError: 200 != 302 : Response didn't redirect as expected: Response code was 200 (expected 302)
165
+ ```
146
166
  ### 補足情報(FW/ツールのバージョンなど)
147
167
  Python 3.10.6
148
168
  Django 4.0.2