如何在 url 规则中对 view_func 进行单元测试?
How to unit test view_func in url rule?
我定义了以下路由 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
是否指向右侧 class。有办法测试吗?
Werkzeug 的 Map
将路径映射到 端点 。 Flask 应用程序将这些端点映射到 app.view_functions
, which is used during app.dispatch_request
中的视图函数。因此,要检查哪个视图已连接到端点,只需从该地图中获取它即可。由于您使用的是基于 class 的 View
,每个实例化的真实视图函数都会不同,因此您改为测试 view_class
是否相同。
self.assertEqual(api.app.view_functions['stage0'].view_class, BBCStage0Task)
这是一种毫无意义的测试,因为您基本上是在测试 Flask 内部结构,而 Flask 已经对其进行了测试。通过简单地使用测试客户端来查看对 url returns 的请求是否符合您的期望,您自己的测试会更有用。
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
我定义了以下路由 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
是否指向右侧 class。有办法测试吗?
Werkzeug 的 Map
将路径映射到 端点 。 Flask 应用程序将这些端点映射到 app.view_functions
, which is used during app.dispatch_request
中的视图函数。因此,要检查哪个视图已连接到端点,只需从该地图中获取它即可。由于您使用的是基于 class 的 View
,每个实例化的真实视图函数都会不同,因此您改为测试 view_class
是否相同。
self.assertEqual(api.app.view_functions['stage0'].view_class, BBCStage0Task)
这是一种毫无意义的测试,因为您基本上是在测试 Flask 内部结构,而 Flask 已经对其进行了测试。通过简单地使用测试客户端来查看对 url returns 的请求是否符合您的期望,您自己的测试会更有用。
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