无法进行依赖注入时的单元测试/代码覆盖

时间:2014-06-04 15:50:52

标签: unit-testing dependency-injection code-coverage

最好用代码解释这个问题,所以假设你有一个名为myFancyLibrary.js的Javascript文件,如下所示:

var curl = require("node-curl");
var MyApiRequester = require("./MyApiRequester");

module.exports = {
    wasCalled: false,
    makeRequest: function(){
        this.wasCalled = true;
        var requester = new MyApiRequester( curl );
        requester.send();
    }
};

如您所见,curl作为参数传递,因此MyApiRequester的单元测试可以使用模拟/存根,而不是实际发出cURL请求。

我的问题是如何在不提出卷曲请求的情况下对makeRequest()进行单元测试?

我意识到您可以为myFancyLibrary.js创建一个包装器并将MyApiRequester作为参数传递,但是包装器只会遇到同样的问题。

最高级别的模块将不可避免地无法接收依赖注入的对象,因为无处接收它们。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果目标是不在makeRequest()函数中发送请求,则必须修改该函数以获取Requester接口,以便您可以在测试中模拟它。鉴于此功能如此之小,您可能会看到收益递减,并且最好通过功能测试来覆盖这种情况。