Я пытаюсь использовать библиотеку unittest.mock
для исправления функции внутри Flask Blueprint. В частности, я пытаюсь исправить модуль os
внутри чертежа. Упрощенный код (невозможно предоставить весь / текущий код):
test_route.py (тест, который я пытаюсь запустить)
import unittest
from unittest import mock
from server.index import create_app as Server
class TestRoute(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.server = Server()
cls.server.config['TESTING'] = True
cls.client = cls.server.test_client()
#
# more code...
#
@mock.patch('server.routes.blueprint.os')
def test_route(self, mockOS):
mockOS.listdir.return_value = ['/mockedvalue']
res = client.post('/some/url')
#
# more code...
#
server / index.py (модуль для создания Flask сервер)
from flask import Flask
from routes.blueprint import bp
def create_app():
app = Flask(__name__)
app.register_blueprint(bp)
#
# more code...
#
server / routs / blueprint.py (логика Blueprint c, используемая сервером Flask)
import os
from flask import Flask, Blueprint
bp = Blueprint('bp', __name__)
@bp.route('/some/url')
def run():
#
# code...
#
dirs = os.listdir('/some/path')
#
# more code...
#
Когда я запускаю это, ОС .listdir () не исправляется. Я получаю фактическое содержимое '/ some / path', когда мне действительно нужно смоделированное значение:
Actual : ['/something1', '/some/other/thing', ...]
Expected : ['/mockedvalue']
Я прочитал https://docs.python.org/3/library/unittest.mock.html#where -в патч , но возможно я все еще делаю ошибку. Представляется целесообразным установить исправление в модуле светокопии, но если это неверно, любые указания или исправления будут приветствоваться.