我有一些代码(芹菜任务)通过urllib
调用Django视图。任务和视图的代码都是同一个Django项目的一部分。
我正在测试任务,需要它能够在测试期间联系视图并从中获取数据,所以我使用的是LiveServerTestCase
。理论上我在我的测试用例的setUp
函数中设置了数据库(我添加了product
个实例的列表),然后调用任务,它做了一些事情,然后通过调用Django视图urllib
(点击LiveServerTestCase
设置的开发服务器),获取product
个实例的JSON列表。
但实际上,看起来我在products
中添加的setUp
在调用时对视图不可见。看起来测试用例代码使用一个数据库(test_<my_database_name>
),并且在开发服务器上运行的视图正在访问另一个(urllib
调用成功联系视图但找不到产品我'我要求)。
为什么会出现这种情况?
可能相关 - 我们正在测试MySQL数据库而不是sqlite。
开出两个问题(但如果你认为我们做错了就对评论感兴趣):
urllib
访问视图似乎很奇怪。我们这样做是因为该任务通常会调用一系列第三方API中的一个来获取有关产品的信息,如果它无法访问这些API,它将访问我们自己的Django产品数据库。进行urllib调用的代码是通用代码,它与我们正在处理的情况无关。urllib
调用,而不是模拟它答案 0 :(得分:0)
即使测试服务器调出其他数据库,芹菜工作者仍然从dev数据库中取食,因为他们被告知在设置文件中。
一个修复方法是创建一个单独的settings_test.py文件,该文件指定测试数据库名称,并使用subprocess.checkoutput从setup命令调出芹菜工作者,该子进程使用特殊队列进行测试。然后这些芹菜工人将从测试数据库而不是开发数据库中提供。