Python/Django Test Framework: Код ответа был 200 (ожидалось 200)

Я использую тестовый фреймворк Django, и в данном случае я тестирую update_password_view, который я создал поверх встроенной PasswordChangeForm.

Мог бы кто-нибудь помочь мне с ошибкой ниже?

После запуска тестов я получаю следующую ошибку:

AssertionError: [] не истина: Ответ не перенаправил, как ожидалось: Код ответа был 200 (ожидалось 200)

.

Вот код:

#views.py
class UpdatePassword(PasswordChangeView):
    form_class = PasswordChangeForm
    success_url = reverse_lazy('posts:home')
    template_name = 'accounts/password.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        
        # get the number of unseen messages
        context['inbox_count'] = Message.objects.filter(
        ~Q(sender=self.request.user), Q(seen=False), 
        (Q(chat__user1=self.request.user) |\
        Q(chat__user2=self.request.user))).count()
        return context

#tests.py
def test_update_password_view(self):
        credentials = {
            'old_password': '123secret', 
            'password1': '321secret', 
            'password2': '321secret',
        }
        response = self.client.post('http://127.0.0.1:8000/users/change-password/', 
                    credentials, follow=True)
        self.assertRedirects(response, '/posts/', status_code=200, 
        target_status_code=200)

status_code внутри assertRedirects должен быть код статуса редиректа, который должен быть 3XX. В вашем случае это должно быть 302. Смотрите больше на docs.

Для правильного поведения вы должны заменить это:

self.assertRedirects(response, '/posts/', status_code=200,  target_status_code=200)

С этим:

self.assertRedirects(response, '/posts/', status_code=302, target_status_code=200)

Кстати, это похоже на следующее:

self.assertRedirects(response, '/posts/')

Это не проверено, но, возможно, проблема в том, что перенаправление не происходит, потому что пользователь не создан или вошел в систему со старым паролем. Попробуйте создать пользователя, войти в систему, а затем запустить тест.

#tests.py

def test_update_password_view(self):

        credentials = {
            'old_password': '123secret', 
            'password1': '321secret', 
            'password2': '321secret',
        }

        # Create and login the user
        self.client.user = User.objects.create(username="testuser", password="123secret")
        c = Client()
        logged_in = c.login(username='testuser', password='123secret')

        response = self.client.post('http://127.0.0.1:8000/users/change-password/', 
                    credentials, follow=True)
        self.assertRedirects(response, '/posts/', status_code=302, target_status_code=200)
Вернуться на верх