тесты на носу приложения Pylons с моделями в init_model? - PullRequest
1 голос
/ 27 августа 2009

У меня есть стандартное приложение Pylons, созданное с использованием paster create -t pylons с одним контроллером и соответствующим функциональным тестом, добавленное с использованием paster controller, а также таблица SQLAlchemy и сопоставленный класс ORM. Материал SQLAlchemy определен в функции init_model(), а не в области видимости модуля (и должен быть там).

Запуск python setup.py test вызывает исключение, потому что nose как-то заставляет init_model() дважды вызываться в одном и том же процессе, поэтому он пытается создать модель, которая уже существует.

Я могу исправить это, установив и проверив глобальную переменную внутри init_model(), но (а) я бы этого не хотел, и (б) сторонние библиотеки, такие как AuthKit, которые динамически определяют модели, также нарушают тесты. и не может быть так легко изменено.

Есть ли способ исправить nose тесты для Pylons, или я должен написать свой собственный тестовый скрипт и просто использовать unittest, loadapp и webtest напрямую? Какие-нибудь рабочие примеры этого?

1 Ответ

3 голосов
/ 28 августа 2009

Я бы попробовал отладить твой тест на нос. Почему бы не поставить:

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.
...