在具有超级优势的路由中使用测试回调

时间:2017-05-14 12:17:08

标签: javascript node.js mocha code-coverage istanbul

我开始使用mocha作为测试覆盖率工具istanbul,其中一个好处就是它向您展示了在测试代码逻辑中测试过的路径(分支)。

只有在数据库发生错误时才能使用路径。

Screenshot of the part I am interested in testing

[I]表示第一个if未经过测试。 问题是它使用回调function(err, data)并且错误通过mongoose模型方法find()传递给此回调,因此我没有流量控制这部分代码。

在这种特定情况下,我使用supertest这是一个模块,用于测试node.js中的路由,并向一个调用mongoose模型方法find()的路由发出请求。

测试此路径的最佳选择是什么?创建存根来模拟方法?或者只是删除if?

编辑:我注意到我使用匿名函数作为回调(err, data)并且这样做我无法测试它,因为它没有暴露给外部范围。我想到的一种方法是创建一个函数:

handleDbFetchingResponse(res) {
    return function(err, data) {
        let response = {};
        if (err) {
            response = {error: true, message: 'Error fetching data'};
        } else {
            response = {error: false, message: data};
        }
        res.json(response);
    }
}

现在我可以公开函数并测试它,但我创建了另一个问题。由于其他表达路由在从数据库获取数据时有另一个逻辑,我将不得不为它们中的每一个创建一个处理函数。也许有一种方法可以创建一个handlerBuilder函数,它返回一个新的处理程序,传递不同的参数来处理特定的情况。

0 个答案:

没有答案