2

我的应用程序正在使用 django-localeurl。我的单元测试在 django 1.5.5 中没问题,但自从我搬到 django 1.6.2 后,由于状态为 301 响应,我有很多错误。

这似乎是由不考虑语言环境前缀的错误 url 引起的。换句话说,reverse在单元测试中调用时,调用的是通常的 djangoreverse而不是 localeurl reverse

我已经检查了在patch_reverse单元测试中是否调用了。我的电话在我的主要 urls.py 的顶部。好像没问题。

但是出于某种原因,djangoreverse被某些东西恢复了。

这个问题似乎只发生在单元测试期间。运行应用程序时,网址已正确本地化。

我认为该问题对应于 django-localeurl 中的以下问题:https ://bitbucket.org/carljm/django-localeurl/issue/22/test-problem

有谁知道什么会导致这个问题(django 1.6 中的单元测试机制发生了变化,这是原因吗?)以及如何解决它?


更新

如果我强制执行以下设置,则不会出现问题

TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
4

1 回答 1

1

似乎原因是DiscoverRunner(在 django 1.6 中运行测试的新方法)提前导入了测试模块以构建要运行的测试列表。

因此,测试模块的导入在设置和 URL 的导入之前执行。reverse然后,模块在修补之前导入 djangourls.py

我的解决方法是在我的测试模块开始时强制打补丁。我认为这不是完美的解决方案,但它有效。

于 2014-02-24T08:35:45.237 回答