如何在url规则中单元测试view_func?

时间:2015-01-31 10:30:43

标签: python unit-testing flask

我定义了以下路由网址规则,并希望对其进行测试。

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是否指向正确的班级。有没有办法测试?

1 个答案:

答案 0 :(得分:1)

Werkzeug的Map映射到端点的路径。 Flask应用程序将这些端点映射到app.view_functions中查看app.dispatch_request期间使用的函数。因此,要检查已连接到端点的视图,只需从该映射中获取它即可。由于您使用的是基于类的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