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)