Django: почему я не могу получить трассировку (в случае ошибки), когда я запускаю тесты LiveServerTestCase?
Я пишу несколько тестов с Selenium.
Когда я запускаю тесты selenium (LiveServerTestCase
type), и у меня есть некоторая ошибка в моем коде (не в тесте, я имею в виду в выполненном коде, например, на домашней странице, которую я вижу с селеном), я получаю шаблон 500 (что обычно я получаю, когда у меня DEBUG = False), даже если у меня есть:
DEBUG = True
INTERNAL_IPS = ('127.0.0.1',)
Я застрял в этом, и я не понимаю, почему мой тест не удался (потому что в публичном 500 я не показываю исключения).
Почему он ведет себя так? Где я могу найти решение?
Когда я запускаю серверы, он отлично работает (я получаю трассировки).
Ответы
Ответ 1
из django docs https://docs.djangoproject.com/en/1.4/topics/testing/#other-test-conditions
Кажется невозможным переопределить это в данный момент, даже с https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.utils.override_settings
единственный способ увидеть отладочную информацию, когда он вернул ответ 500, - это зарегистрировать его.
edit: я нашел способ установить DEBUG = True
в моих тестах на селен.
В моем подклассе я переопределяю конструктор и изменяю настройку.
from django.conf import settings
class SeleniumLiveServerTestCase(LiveServerTestCase):
def __init__(self, *args, **kwargs):
super(SeleniumLiveServerTestCase, self).__init__(*args, **kwargs)
if settings.DEBUG == False:
settings.DEBUG = True
это уродливо, но работает!
Ответ 2
Я столкнулся с той же проблемой, и теперь можно переопределить настройки.
на основе вашего примера вы импортируете override_settings
и поместите декоратор над классом:
from django.test import override_settings
@override_settings(DEBUG=True)
class SeleniumLiveServerTestCase(LiveServerTestCase):
...
подробности в django docs
Ответ 3
Я не очень хорошо знаком с набором тестов Selenium, но я знаю, что если вы развертываете приложение, а ваш IP-адрес не зарегистрирован в кортеже "INTERNAL_IPS", вы можете не увидеть трассировки, даже если DEBUG установлено значение True. Когда вы используете Django runerver, он автоматически добавляет локальную машину к параметру INTERNAL_IPS, однако обычно это пустой кортеж. Моя ставка заключается в том, что Selenium не делает этого для вас, и может быть, поэтому вы не видите трассировки. Я бы попробовал добавить это, если вы еще этого не сделали.
Что-то вроде этого должно работать нормально:
INTERNAL_IPS = ('127.0.0.1',)
Настройки Django (INTERNAL_IPS)