2016-01-24 2 views
1

Я хочу протестировать задачу huey, и ее необходимо исправить requests.get.Как делать издевательства/обезьяны в huey-задачах?

# 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() 

Launch huey_consumer: 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? В конце концов, я не могу удалить декоратор каждый раз, должен быть лучшим способом.

ответ

0

Если я правильно читать это ваша проблема

  • Huey задачи выполняются в отдельном процессе потребительского

  • Юнит тесты запустить в своем собственном процессе

Процесс не может издеваться или патч другой. Либо

  • Сделайте ваши пути кода, так что вам не нужно издеваться процесс потребительского патч ... не называйте задачи непосредственно, но сделать их функции, которые вы можете разоблачить и патч

  • Run Huey внутри вашего процесса тестирования с помощью резьбы

0

ОК, наконец, нашли способ проверить

# huey_tasks.py 

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

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

Важная часть состоит в том, чтобы определить фактическую функцию задачи, а затем украсить ее. Обратите внимание: huey.task - это декоратор, которому нужны аргументы.

@patch('requests.get') 
def test_patched(fake_get): 
    fake_get.return_value = '1' 
    huey_tasks._function() 

Непосредственно запустить тестовый код без запуска huey_consumer.

Смежные вопросы