我想测试一个huey任务,需要修补requests.get

# huey_tasks.py

from huey import RedisHuey

huey = RedisHuey()

@huey.task()
def function():
    import requests
    print(requests.get('http://www.google.com'))

运行测试的文件:
import huey_tasks

@patch('requests.get')
def call_patched(fake_get):
    fake_get.return_value = '1'
    huey_tasks.function()

启动休伊消费者:huey_tasks.huey -w 10 -l logs/huey.log
运行测试,但是修补没有任何效果。
[2016-01-24 17:01:12,053] INFO:requests.packages.urllib3.connectionpool:Worker-1:Starting new HTTP connection (1): www.google.com
[2016-01-24 17:01:12,562] INFO:requests.packages.urllib3.connectionpool:Worker-1:Starting new HTTP connection (1): www.google.com.sg
<Response[200]>

如果我移除@huey.task()装饰器,则会打印修补工作和1
那么我应该如何测试huey任务呢?毕竟,我不能每次都把装修工搬走,得有更好的办法。

最佳答案

好吧,终于找到了一种测试的方法

# huey_tasks.py

def _function():
    import requests
    print(requests.get('http://www.google.com'))

function = huey.task()(_function)
import huey_tasks

重要的是首先定义实际的任务函数,然后对其进行修饰。注意huey.task是一个需要参数的decorator。
@patch('requests.get')
def test_patched(fake_get):
    fake_get.return_value = '1'
    huey_tasks._function()

直接运行测试代码而不启动huey_consumer

08-20 02:29