你如何在django中测试一个委托自身内部任务的方法?

时间:2017-05-22 20:18:24

标签: django testing celery

说我有2个芹菜任务:

@app.task(name='process_one_line')
def process_one_line(line):
    do_alot(line)

@app.task(name='process_one_file')
def process_one_file(file_id):
    for line in get_file_by_id(file_id):
        process_one_line.delay(line)

并说我有一个看起来像这样的TestCase:

def test_processing_a_file(self):
    process_one_file(self.file_id)

这样运行正常,但委托的process_one_line方法实际上被推送到测试用例之外的其他celery实例。简而言之,我在端口6379上运行的redis服务器接收任务,然后将它们推送到" main"工作人员。因此,do_alot所做的任何更改都会反映在实际数据库中,而不是运行django测试时创建的测试数据库。

我可以通过让它自己测试process_one_line来测试一些东西,但如果我可以完全测试整个事情那就太好了。

1 个答案:

答案 0 :(得分:1)

您可以将CELERY_ALWAYS_EAGER=True添加到测试设置中,以防止将所有任务发送到redis。