使用 init_model 中的模型对 Pylons 应用程序进行鼻子测试?

发布于 2024-08-03 17:24:53 字数 622 浏览 11 评论 0原文

我有一个使用 paster create -t​​ pylons 创建的库存 Pylons 应用程序,其中包含一个控制器和匹配的功能测试,使用 paster 控制器 添加,以及一个 SQLAlchemy 表和映射的 ORM 类。 SQLAlchemy 的内容是在 init_model() 函数中定义的,而不是在模块范围内(并且需要在那里)。

运行 python setup.py test 会引发异常,因为 nose 不知何故导致 init_model() 在同一进程中被调用两次,因此它正在尝试创建一个已经存在的模型。

我可以通过在 init_model() 中设置和检查全局变量来巧妙地解决此问题,但是 (a) 我不愿意,(b) 动态定义模型的第三方库(例如 AuthKit)会中断测试也是如此,并且不能轻易更改。

有没有办法修复 Pylons 的 nose 测试,或者我应该编写自己的测试脚本并仅使用 unittestloadappwebtest ?有这方面的工作示例吗?

I have a stock Pylons app created using paster create -t pylons with one controller and matched functional test, added using paster controller, and a SQLAlchemy table and mapped ORM class. The SQLAlchemy stuff is defined in the init_model() function rather than in module scope (and needs to be there).

Running python setup.py test raises an exception because nose is somehow causing init_model() to be called twice within the same process, so it's trying to create a model that already exists.

I can hackishly fix this by setting and checking a global variable inside init_model(), but (a) I'd rather not, and (b) third-party libraries such as AuthKit that dynamically define models break the tests as well, and can't be so easily changed.

Is there a way to fix nose tests for Pylons, or should I write my own test script and just use unittest, loadapp, and webtest directly? Any working examples of this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

燕归巢 2024-08-10 17:24:53

我会尝试调试你的鼻子测试运行。为什么不将:

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.

I would try debugging your nosetest run. Why not put:

import pdb;pdb.set_trace()

in the init_model() function and see how it is getting invoked more than once.

With PDB running you can see the stack trace using the where command:

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.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文