python - 如何在 url 规则中对 view_func 进行单元测试?

标签 python unit-testing flask

我定义了以下路由 url 规则并想对其进行测试。

app.add_url_rule('/api/v1.0/worker/bbc-stage-0', 'stage0', view_func=BBCStage0TaskView.as_view('bbc_stage0_taskview'))

以下测试路径是否正确:

def test_url_to_view_stage0_exists(self):
        self.assertEqual(api.app.url_map._rules_by_endpoint['stage0'][0].rule, '/api/v1.0/worker/bbc-stage-0')

我还没有找到一种方法来测试 view_func 是否指向正确的类。有办法测试吗?

最佳答案

Werkzeug 的Map 将路径映射到端点。 Flask 应用程序映射这些端点以查看 app.view_functions 中的函数,在 app.dispatch_request 期间使用.因此,要检查哪个 View 已连接到端点,只需从该 map 中获取它即可。由于您使用的是基于类的 View,因此每次实例化时真实的 View 函数都会不同,因此您需要测试 view_class 是否相同。

self.assertEqual(api.app.view_functions['stage0'].view_class, BBCStage0Task)

这是一种毫无意义的测试,因为您基本上是在测试 Flask 内部结构,而 Flask 已经对其进行了测试。通过简单地使用测试客户端来查看对 url 的请求是否返回您期望的内容,您自己的测试会更有用。

with api.app.test_client() as client:
    rv = client.get('/api/v1.0/worker/bbc-stage-0')

# assert something about the response, such as 'expected string' in rv.data

关于python - 如何在 url 规则中对 view_func 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28250607/

相关文章:

java - 如何用 mockito 模拟 builder

python - 如何禁用 Flask 中的线程?

python - flask 返回存储在数据库中的图像

python - 我如何才能等到使用 Python 套接字接收数据?

Python 混淆函数引用

python - Gspread 访问 google 电子表格 : HttpAccessTokenRefreshError, 无效的 JWT

unit-testing - golang 这应该是一个集成测试吗?

python - numpy.sum 性能取决于轴

java - java.lang.NullPointerException:无法在空对象上调用方法queryForList()

javascript - FlaskWTF 如何向 Vue 前端发送 CSRF token