我的应用程序使用的是 django-localeurl。我的单元测试在 django 1.5.5 中没问题,但自从我转到 django 1.6.2 后,由于响应状态为 301,我遇到了很多错误。
这似乎是由于不考虑语言环境前缀的错误 url 引起的。换句话说,在单元测试中调用 reverse 时,会调用通常的 django reverse 而不是 localeurl reverse。
我检查过 patch_reverse 在单元测试中被调用。我的调用位于我的主 urls.py 的顶部。好像还可以。
但是由于某种原因,django reverse 被某些东西恢复了。
这个问题似乎只发生在单元测试期间。运行应用程序时,URL 已正确本地化。
我认为该问题对应于 django-localeurl 中的以下问题:https://bitbucket.org/carljm/django-localeurl/issue/22/test-problem
有谁知道什么会导致这个问题(单元测试机制在 django 1.6 中发生了变化,是这个原因吗?)以及如何解决它?
更新
如果我强制执行以下设置,则不会出现此问题
TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
请您参考如下方法:
看来原因是 DiscoverRunner(在 django 1.6 中运行测试的新方法)提前导入测试模块以构建要运行的测试列表。
因此,测试模块的导入在设置和 url 的导入之前执行。然后,模块在 urls.py
reverse
我的解决方法是在测试模块的开头强制打补丁。我认为这不是完美的解决方案,但它确实有效。
