嘲笑Flask的“send_from_directory”进行测试

时间:2017-02-13 15:54:38

标签: python unit-testing flask mocking python-unittest

我正在使用unittest来测试为Python 3.5编写的Flask应用程序。我有一个static目录,其中包含将由我们的客户嵌入的HTML文件。根据请求来自哪个客户端,我添加了不同的头文件(CORS,CSP等)。

端点如下所示:

@app.route('/embed/<path:filename>', methods=['GET']):
def embed_static(filename):
    response = flask.send_from_directory(app.config['EMBED_DIR'], filename)

   # Do the header magic here

   return response

...我为它写了一个测试:

def test_embed_static(self):
    with unittest.mock.patch('flask.send_from_directory') as mocked:
        page = app.test_client().get('/embed/test/index.html')

    self.assertTrue(mocked.called)

最后一个断言总是失败。 unittest.mock.patch在其他测试中的作用就像魅力一样。

我是否忽略了某些事情,或者这是一个我不知道的特殊情况?

1 个答案:

答案 0 :(得分:0)

在调用测试api之前,您需要分配模拟对象的return_value。将代码更改为以下代码后,它可以工作:

def test_embed_static(self):
    with unittest.mock.patch('flask.send_from_directory') as mocked:
        mocked_return_value = "Test Mock"
        page = app.test_client().get('/embed/test/index.html')

    self.assertTrue(mocked.called)