使用 Flask + Nose(使用 Coverage 插件)进行单元测试 - 根据覆盖率报告永远不会调用视图

Unit testing with Flask + Nose (with Coverage plugin) - Views are never called according to coverage report

给定以下 Flask 视图

@contact.route('/contactInfo', methods=["POST"])
def contact_info():
    return Response(httplib.OK)

以及以下简单的单元测试:

class TestContactViews(object):

    def setUp(self):
        self.app = create_app()
        self.client = self.app.test_client()

    def post_contact_info(self):
        r_view = self.cient.post('/contactInfo')
        assert_equals(r_view, httplib.OK)

当 运行 nosetests --with-coverage --cover-tests 时,视图的报告状态被标记为 Missing,因为它从未被调用过。是否缺少某些东西或需要一个选项?

注意:完整代码可在 GitHub

如果您将 -v(详细)选项添加到 nosetests 命令,您将发现您的许多测试未被发现和执行。只有五个测试是 运行.

原因是具有单元测试的方法需要有一个以test_前缀开头的名称。这就是鼻子找到它们的方式。所以基本上你需要将测试更改为:

def test_post_contact_info(self):
    r_view = self.cient.post('/contactInfo')
    assert_equals(r_view, httplib.OK)

我还建议您将 --cover-package=py_showcase 添加到您的 nose 命令中,以便过滤覆盖范围以仅显示您自己的代码,而不显示您在 virtualenv 中的第三方代码。