Проблемы с Django Test Runner и клиентом для входа в систему с бэкэндом аутентификации - PullRequest
2 голосов
/ 22 февраля 2012

Используя оболочку, я могу сделать это:

>>> from django.test.client import Client
>>> from django.test.utils import setup_test_environment
>>> setup_test_environment()
>>> c = Client()
>>> c.login(username="dev", password="password")
True
>>> r = c.get('/')
>>> r.status_code
200

Теперь с этим в файле test.py:

from django.test.client import Client

__test__ = {"doctest": """
>>> c = Client()
>>> c.login(username='dev', password='password')
True
>>> r = c.get('/')
>>> r.status_code
200
"""}

Я получаю этот вывод:

Failed example:
    c.login(username="dev", password="password")
Expected:
    True
Got:
    False
------------------------------------------------------
Failed example:
    r.status_code
Expected:
    200
Got:
    302

Я просмотрел весь интернет и не могу найти ничего, что помогло бы в этой ситуации.Есть идеи?

В аналогичной заметке я прокомментировал: from django.views.decorators.debug import sensitive_post_parameters и все @sensitive_post_parameters() декораторы из моего кода, потому что каждый раз, когда я запускаю ./manage.py test app, django жалуется:
Could not import app.views. Error was: No module named debug
Удаление этого декоратора и оператора import позволяет ему двигаться вперед.

Я очень потерян, и мне нужен StackOverflow!Спасибо всем.

1 Ответ

2 голосов
/ 22 февраля 2012

sensitive_post_parameters - это новая функция в Django 1.4, поэтому, если вы используете Django 1.3 или более раннюю версию, импорт завершится неудачей.

Я считаю, что команды, которые вы пробовали в оболочке, выполнялись в обычной базе данных. Когда вы запустите ваши doc тесты, Django создаст тестовую базу данных. Похоже, ваш пользователь dev не находится в тестовой базе данных, когда вы запускаете doc-тесты, поэтому попытка входа не удалась. Один из вариантов - создать пользователя с User.objects.create_user перед попыткой входа в систему. Другой вариант - использовать светильники.

С Django я бы порекомендовал писать юнит-тесты вместо doc-тестов. Одним из больших преимуществ является то, что легко включить приборы для загрузки исходных данных (например, пользователей) в тестовую базу данных. Другая причина в том, что Django заботится об обновлении базы данных между юнит-тестами.

...