В модульном тесте с django-webtest не существует форм

Я хочу написать тест, который будет проверять изменение пароля в приложении. Я использую Джанго-Аллаута. Для тестирования я использую django-WebTest.

Когда я запускаю свой код, я получаю сообщение:

FAILED (errors=1)
Destroying test database for alias 'default'...
mark@mariusz-K73E:~/myapp$ python manage.py test users
Creating test database for alias 'default'...
.E
======================================================================
ERROR: test_password_change_use_template (myapp.users.tests.ChangePasswordTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/mark/myapp/users/tests.py", line 16, in test_password_change_use_template
    password_change.form['oldpassword'] = "test123"
  File "/home/mark/.virtualenvs/urlop/local/lib/python2.7/site-packages/webtest/response.py", line 56, in form
    "You used response.form, but no forms exist")
TypeError: You used response.form, but no forms exist

Мой код:

from django_webtest import WebTest
from django_dynamic_fixture import G
from users.models import User
from django.core.urlresolvers import reverse

class ChangePasswordTest(WebTest):
    def setUp(self):
        self.user = G(User)

    def test_password_change_code(self):
        password_change = self.app.get(reverse('account_change_password'), user=self.user)

    def test_password_change_use_template(self):
        password_change = self.app.get(reverse('account_change_password'), user=self.user)
        password_change.form['oldpassword'] = "test123"
        password_change.form['password1'] = "test456"
        password_change.form['password2'] = "test456"
        password_change.form.submit()
        self.assertRedirects(password_change, reverse('change_password'))

1 ответ

WebTest тестирует визуализированный контент. В HTML нет формы (возможно, тег формы неправильный или отсутствует).

Если это работает в вашем ручном тесте. Вы можете попробовать распечатать ответ, чтобы увидеть, что отличается:

def test_password_change_use_template(self):
    response = self.app.get(reverse('account_change_password'), user=self.user)
    print response
Другие вопросы по тегам