gpt4 book ai didi

python - 如何在 Flask 蓝图中模拟.patch 函数?

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:47 25 4
gpt4 key购买 nike

我正在尝试使用 unittest.mock 库来修补 Flask 蓝图中的函数。具体来说,我正在尝试修补蓝图中的 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/routes/blueprint.py(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...
#

当我运行此命令时,os.listdir() 没有得到修补。当我真正想要的是模拟值时,我得到了“/some/path”的实际内容:

    Actual   : ['/something1', '/some/other/thing', ...]
Expected : ['/mockedvalue']

我已阅读 https://docs.python.org/3/library/unittest.mock.html#where-to-patch ,但也许我仍然犯了一个错误。在蓝图模块上打补丁似乎是合适的,但如果这是不正确的,任何指导或更正将不胜感激。

最佳答案

如果你设置会发生什么

    @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')

关于python - 如何在 Flask 蓝图中模拟.patch 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60024086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com