Предположим, у нас есть следующая Flask функция просмотра для тестирования. В частности, мы хотим смоделировать create_foo()
при записи в файловую систему.
# proj_root/some_project/views.py
from some_project import APP
from some_project.libraries.foo import create_foo
@APP.route('/run', methods=['POST']
def run():
bar = create_foo()
return 'Running'
Теперь мы хотим написать модульный тест для run()
с вызовом create_foo()
, чтобы избежать создания ненужных файлов. .
# proj_root/tests/test_views.py
from some_project import some_project
@pytest.fixture
def client():
some_project.APP.config['TESTING'] = True
with some_project.APP.test_client() as client:
yield client
def test_run(client, monkeypatch):
monkeypatch.setattr('some_project.libraries.foo.create_foo', lambda: None)
response = client.post('/run')
assert b'Running' in response.data
Кажется, что этот подход должен работать даже с именованным create_foo
import. Все тесты пройдены, однако исходный код create_foo
явно выполняется, поскольку новый файл в файловой системе создается при каждом запуске набора тестов. Что мне не хватает? Я подозреваю, что это как-то связано с именованным импортом, основанным на некоторых связанных вопросах, но я не уверен.