2015-04-20 7 views
2

У меня есть следующий каталогКакой модуль для исправления

/root 
    /app 
     /api 
      my_api.py 
     /service 
      my_service.py 
    /tests 
    test_api.py 

my_api.py

import app 
def run_service(): 
    app.service.my_service.service_function() 

test_api.py

@patch('app.service.my_service.service_function') 
test_run_service(self,mock_service): 
    mock_service.return_value = 'Mock' 
    response = self.client.get(url_for('api.run_service') 
    self.assertTrue(response == expected_responce) 

Вышеуказанные работы. То, что я не могу понять, это какой модуль мне нужно исправить, в случае, если я хотел импортировать service_function в my_apy.py так:

from app.service.my_service import service_function 

Если я делаю импорт, как выше, макет перестает работать.

ответ

6

Вам нужно пропатчить из app.api.my_api.service_function, поскольку это глобальное имя уже привязан к импортируемому объекту:

@patch('app.api.my_api.service_function') 
test_run_service(self, mock_service): 
    mock_service.return_value = 'Mock' 
    response = self.client.get(url_for('api.run_service') 
    self.assertTrue(response == expected_responce) 

Смотрите Where to patch section:

Основной принцип заключается в том, что вы патч, где объект искал, что не обязательно совпадает с местом, где оно определено.

+0

Я читал это раньше, но теперь, я думаю, я могу понять это лучше. Придется использовать app.my_api.service_function. Спасибо – Giannis

+0

Ах, да, укажите название пакета здесь. –

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