Вопрос

У меня есть приложение 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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top