【发布时间】:2012-01-04 11:40:24
【问题描述】:
我有一个通过 django-haystack 使用 SOLR 搜索引擎的项目。搜索引擎位于不同的实时服务器上,并且在测试运行期间触摸它是不可取的(实际上,这是不可能的,因为对该主机的访问被防火墙了)
我正在使用标准的 django 测试运行程序。幸运的是,它为我提供了我可以根据自己的喜好修改的对象测试设置,但事实证明这并不是故事的结局。
django-haystack 中的很多东西都是在导入时实例化的,所以当我在测试运行程序中更改测试设置时为时已晚,尽管我将 SEARCH_BACKEND 更改为虚拟,但测试仍然打电话给SOLR。该问题并非特定于 HAYSTACK - mongoengine 也会出现同样的问题。任何类级别的语句(例如 CharField(default=Blah.objects.find(...)))都会在 django 有机会更改设置之前的实例化时间执行。
当然,问题的根源在于 Django 设置是一个可怕的全局可变混乱,并且 Django 没有为实例化代码提供集中位置。鉴于此,对于最简单的测试解决方案有什么建议吗?目前我正在考虑一个 shell 脚本,它将 DJANGO_SETTINGS 环境变量更改为 test_settings 并在之后运行 ./manage.py 测试。如果我仍然可以通过 ./manage.py 做事,那就更好了。
有更好的想法吗?有类似问题的人?
【问题讨论】:
-
我知道这可能对你没有多大帮助(我也很失望),但显然 Django 1.4 将能够指定设置文件。 docs.djangoproject.com/en/dev/topics/testing/… 现在虽然这个 SO 答案很棒 stackoverflow.com/a/3519955/495154
标签: django settings django-haystack