最好用代码解释这个问题,所以假设你有一个名为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
作为参数传递,但是包装器只会遇到同样的问题。
最高级别的模块将不可避免地无法接收依赖注入的对象,因为无处接收它们。有没有办法解决这个问题?
答案 0 :(得分:0)
如果目标是不在makeRequest()函数中发送请求,则必须修改该函数以获取Requester接口,以便您可以在测试中模拟它。鉴于此功能如此之小,您可能会看到收益递减,并且最好通过功能测试来覆盖这种情况。