当我的模型更新时,如何使我的测试按预期运行?

问题描述 投票:0回答:1

我的看法

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视图,但是当我尝试通过测试更新时,我不能,但是通过站点手动,一切都很好,当我更新它时,我仍然可以从测试开始,也许我做错了什么!

django testing view django-views django-tests
1个回答
0
投票

请注意,您的测试不会模仿更新视图的使用。
您还应该发布未更改的数据,因为这些数据将在您输入任何更新之前加载到页面上。

    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
,以确保在断言数据之前表单成功

© www.soinside.com 2019 - 2024. All rights reserved.