我的看法
class MovieUpdateView(UpdateView):
model = Movie
template_name = "movie_update.html"
fields = [
'movie_name',
'movie_year',
'movie_director',
'movie_rating',
'movie_cover_image'
]
def get_success_url(self):
return reverse_lazy('movie_detail', kwargs={'pk': self.object.pk})
我的测试更新
def setUp(self):
self.movie = Movie.objects.create(
movie_name='Avengers - Endgame',
movie_year= 2019,
movie_director='Anthony Russo, Joe Russo',
movie_rating=10.0,
movie_cover_image = '\movies\images\movies_covers\1f8373201516a4657649d61e97b1f91a_WhvCLCe.jpg'
)
def test_movie_update_view(self):
self.assertEqual(self.movie.movie_name, 'Avengers - Endgame')
movie_update = {
'movie_name' :'Title Updated',
'movie_director' :'New Director',
}
response = self.client.post(
reverse('movie_update', kwargs={'pk': self.movie.pk}),
data=movie_update
)
self.movie.refresh_from_db()
self.assertEqual(self.movie.movie_name, 'Title Updated')
File "E:\\Users\\Santiago\\Desktop\\web-projects\\personal_blog\\reviews\\tests.py", line 99, in test_movie_update_view
self.assertEqual(self.movie.movie_name, 'Title Updated')
AssertionError: 'Avengers - Endgame' != 'Title Updated'
- Avengers - Endgame
+ Title Updated
我想基于UpdateView泛型类测试我的MovieUpdateView视图,但是当我尝试通过测试更新时,我不能,但是通过站点手动,一切都很好,当我更新它时,我仍然可以从测试开始,也许我做错了什么!
请注意,您的测试不会模仿更新视图的使用。
您还应该发布未更改的数据,因为这些数据将在您输入任何更新之前加载到页面上。
def test_movie_update_view(self):
self.assertEqual(self.movie.movie_name, 'Avengers - Endgame')
movie_update = {
'movie_name': self.movie.movie_name,
'movie_year': self.movie.movie_year,
...
}
movie_update &= {
'movie_name' :'Title Updated',
'movie_director' :'New Director',
}
response = self.client.post(
reverse('movie_update', kwargs={'pk': self.movie.pk}),
data=movie_update
)
self.movie.refresh_from_db()
self.assertEqual(self.movie.movie_name, 'Title Updated')
我的猜测是,您的某些模型字段不可为空,因此表单将需要这些字段。由于您只发送了
movie_name
和 movie_director
,因此出现错误。
您应该在请求中使用
assertTemplateUsed
和 follow=True
,以确保在断言数据之前表单成功