Django Unit Testing - похоже, не работает логин клиента - PullRequest
0 голосов
/ 04 мая 2018

Я имел в виду учебник в https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Testing, когда работал над собственным модульным тестированием. Коды моего юнит теста ниже:

from django.core.urlresolvers import reverse
from django.test import Client, TestCase
from django.contrib.auth.models import User

from companies.models import Company

class ContactViewTest(TestCase):

    def setUp(self):
        self.client = Client(HTTP_HOST='localhost:8000')

        company = Company(name='Test')
        company.save()

        user = User.objects.create(username='test_user1', email='test_user1@test.com')
        user.set_password('password')
        user.save()

        self.user = user
        self.company = company

    def test_logged_in_all_contacts_correct_template(self):
        c = self.client
        user_login = c.login(username=self.user.username, password=self.user.password)
        self.assertTrue(user_login)

        resp = c.get(reverse('all-contacts'), follow=True)

        # Check if user is logged in
        self.assertEquals(str(resp.context['user']), 'test_user1')
        # Check if response is "success"
        self.assertEqual(resp.status_code, 200)

        self.assertTemplateUsed(resp, 'all_contacts.html')

После запуска python manage.py test contacts.tests, я столкнулся с несколькими ошибками.

Первым является self.assertTrue(user_login), который возвращает AssertionError: False is not true

Второе существо self.assertEquals(str(resp.context['user']), 'test_user1'), которое возвращает AssertionError: 'AnonymousUser' != 'test_user1', когда я удалил self.assertTrue(user_login)

Я не совсем уверен, что пошло не так, кроме client.login () не сработал, как я ожидал, так что заранее спасибо всем, кто может помочь.

1 Ответ

0 голосов
/ 04 мая 2018

Проблема в том, что self.user.password - это хешированный пароль.

Вы можете сделать,

user_login = c.login(username=self.user.username, password='password')

или вместо него можно использовать force_login, для которого не требуется пароль.

c.force_login(self.user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...