Как один mock.patch функция внутри Flask Blueprint? - PullRequest
1 голос
/ 02 февраля 2020

Я пытаюсь использовать библиотеку 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 -в патч , но возможно я все еще делаю ошибку. Представляется целесообразным установить исправление в модуле светокопии, но если это неверно, любые указания или исправления будут приветствоваться.

1 Ответ

0 голосов
/ 19 февраля 2020

что происходит, если вы установите

    @mock.patch('server.routes.blueprint.os')
    def test_route(self, mockOS):
        with Server.app.app_context():        
            mockOS.listdir.return_value = ['/mockedvalue']
            res = client.post('/some/url')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...