Как отладить неудачные тесты в Django?
Как отлаживать мои тесты? Например, я POST для создания записи и ожидаю, что она проверит и вернет определенную страницу. Он работает в браузере и в оболочке, но тест - это единственное, что не удается (по иронии!). Я хотел бы напечатать ответ на консоль или что-то еще, чтобы я мог читать ошибки или что у вас есть. Но я могу видеть только то, что я print
в частности. вид.
Не уверен, что это необходимо, но здесь приведенный тестовый код от tests.py
:
resp = self.client.post('/meal/invite/',
{'summary': 'Test munch', 'when': now(), 'max_diners': '1', 'description': 'Munchies'}, follow=True)
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'Test munch', 1)
self.assertContains(resp, 'You are hosting this meal', 1)
Последнее утверждение неверно. Если я изменил его на значение, присутствующее на исходной странице формы с указанием ошибок поля, оно пройдет. Я просто не вижу, что мне не хватает.
У меня есть несколько других тестов, но я просто не знаю, как отлаживать это.
Как это сделать?
Ответы
Ответ 1
Вы можете зайти в pdb
и проверить все.
Если вы используете nose
, я считаю, что вам нужно запускать тесты с помощью -s
-s, --nocapture Don't capture stdout (any stdout output will be
printed immediately) [NOSE_NOCAPTURE]
Это не дает вам увидеть результат сразу.
Ответ 2
Запуск теста под pdb:
python -m pdb manage.py test yourapp
Я согласен с Alasdair, отклик на печать. (и печатный материал в целом) - отличная помощь. Результат путается с выходным сигналом обычного тестового бегуна и должен быть удален, как только вы найдете проблему и исправите ее, но это может помочь вам сузить проблему.
Кроме того, если код работает в браузере и оболочке, но не в unit test, помните, что unit test создает новую (пустую) базу данных. Убедитесь, что ваш setUp помещает любые данные, необходимые для вашего теста.
(Обновлена часть кода из предложения Патрика, спасибо Патрику)
Ответ 3
Самое простое - добавить print response.content
перед вашим утверждением. Результат может быть немного подавляющим, но часто его достаточно, чтобы вы могли выявить проблему.
Если это не решит проблему, в документах есть множество функций, которые могут помочь. Добавьте несколько заявлений о печати и посмотрите, что вы получаете. Вот несколько советов, но не ограничивайте их, в документах есть больше инструментов.
https://docs.djangoproject.com/en/dev/topics/testing/
Сначала вам нужно проверить, что страница действительно перенаправляется, как вы ожидаете. Попробуйте использовать redirect_chain
или assertRedirects
.
Я подозреваю, что ваши почтовые данные по какой-то причине недействительны. Вы можете получить форму из контекста ответа.
form = response.context['form']
print form.is_valid()
print form.errors
Ответ 4
Можно использовать eclipse IDE с Pydev, создать конфигурацию Debug, в которой Аргументы являются тестовой командой. Что-то вроде:
test users.tests.selenium_tests.UsersTestCase.test_user_creation --keepdb --settings=project.settings.test_settings
![enter image description here]()
А затем используйте отладчик Pydev с точками останова и пошаговым рабочим процессом, переменными, выражениями и т.д.
Документы находятся здесь (http://www.pydev.org/manual_adv_debugger.html), но не ссылаются на Django.
Ответ 5
Если вы используете vscode, вы можете создать новую конфигурацию в вашем файле root/vscode/launch.json следующим образом:
{
"version": "0.2.0",
"configurations": [
{
"name": "Django RUN",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"runserver",
"--noreload",
"--nothreading"
],
"django": true
},
{
"name": "Django TEST",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/manage.py",
"args": [
"test",
"<your-app-name>",
],
"django": true
}
]
}
Это позволяет вам устанавливать контрольные точки в ваших тестах и отлаживать их с помощью vscode.