носовые тесты приложения Pylons с моделями в init_model?
-
20-09-2019 - |
Вопрос
У меня есть приложение stock Pylons, созданное с помощью paster create -t pylons
с одним контроллером и соответствующим функциональным тестом, добавленным с помощью paster controller
, а также таблица SQLAlchemy и сопоставленный класс ORM.Материал SQLAlchemy определен в init_model()
функция, а не в области модуля (и должна быть там).
Выполняется python setup.py test
вызывает исключение, потому что nose
каким-то образом вызывает init_model()
вызывается дважды в рамках одного и того же процесса, поэтому он пытается создать модель, которая уже существует.
Я могу хакерски исправить это, установив и проверив глобальную переменную внутри init_model()
, но (а) я бы предпочел этого не делать, и (б) сторонние библиотеки, такие как AuthKit, которые динамически определяют модели, также нарушают тесты и не могут быть так легко изменены.
Есть ли способ исправить nose
тесты для пилонов, или я должен написать свой собственный тестовый скрипт и просто использовать unittest
, loadapp
, и webtest
напрямую?Есть какие-нибудь рабочие примеры этого?
Решение
Я бы попробовал отладить ваш тестовый запуск nosetest.Почему бы не поставить:
import pdb;pdb.set_trace()
в init_model()
выполните функцию и посмотрите, как она вызывается более одного раза.
При запущенной PDB вы можете просмотреть трассировку стека, используя where
команда:
w(here)
Print a stack trace, with the most recent frame at the bottom.
An arrow indicates the "current frame", which determines the
context of most commands. 'bt' is an alias for this command.