Тестирование Django при создании пользователя с адресом электронной почты из сеанса ввода, assertRedirects не работает - PullRequest
0 голосов
/ 29 ноября 2018

При создании пользователя адрес электронной почты используется как USERNAME_FIELD, и он извлекается из сеанса и сохраняется в форме save().Кажется, он не идет дальше до перенаправления.Как я могу проверить перенаправление в этом случае?

tests.py:

class RegistraionViewTest(TestCase):

    valid_data = {
        'email': 'good@day.com',
        'password1': 'test1234', 
    }

    kwargs = {
        'email': 'good@day.com'
    }

    def test_registration(self):
        response = self.client.post(reverse('registration'), data=self.valid_data, follow=True)
        self.assertTrue(response.context['form'].is_valid())

        # mocking the session input
        response.context['form'].save(email=self.kwargs['email'])
        self.assertTrue(account.check_password(self.valid_data['password1']))

        # working so far, but it seems there is no redirect url in response
        self.assertRedirects(response, reverse('next_url'))

In views.py:

   if request.method == 'POST':
    form = RegistraionForm(request.POST)

    if form.is_valid():   
        email = request.session.get('email') 
        try: 
            account = form.save(email=email)
            return HttpResponseRedirect('next_url'))

In forms.py:

def save(self, **kwargs):
    user = super(RegistrationForm, self).save(commit=False)
    user.email = kwargs.pop('email')
    user.save()
    return user

Кажется, что в ответе в tests.py нет URL-адреса.Что здесь пошло не так?

1 Ответ

0 голосов
/ 29 ноября 2018

Ваш ответ может быть 500, а не 302. Это означало бы, что заголовок Location отсутствует.

При вызове request.session.get ('email'), скорее всего, выдается KeyError, так как вашtest, по-видимому, не устанавливает поле сеанса ['email'], и по умолчанию его нет.

Обратите внимание, что при использовании сеанса в тестовом примере его необходимо назначить переменной в начале,как в примере ниже (из документов Django Testing Tool ):

def test_registration(self):
    session = self.client.session
    session['email'] = self.kwargs['email']
    session.save()
    # and now make your call to self.client.post
    response = self.client.post(...)
    self.assertEqual(response.status_code,302)
    # .. and the rest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...