gpt4 book ai didi

Javascript 单元测试,测试命中函数内的回调

转载 作者:行者123 更新时间:2023-12-03 10:14:24 26 4
gpt4 key购买 nike

我在测试中无法完全覆盖,我试图在我正在测试的函数中调用回调函数。这是函数:

CrowdControl.prototype.get = function() {
var options = this.optionsFor('GET');
return q.Promise(function(resolve, reject) {
function callback(error, response, body) {
if (error) {
reject(error);
} else {
resolve(body);
}
}

request(options, callback);
});
};

所以我已经覆盖了除了函数回调之外的函数:

function callback(error, response, body) {
if (error) {
reject(error);
} else {
resolve(body);
}
}

我似乎不知道如何通过测试来解决这个问题。

在顶部我已经像这样删除了请求

   var request = sinon.stub();

beforeEach(function() {
CrowdControl = rewire('crowdcontrol');
CrowdControl.__set__({
request: request
});
});

所以我不确定如何让它触发回调并测试它。可以使用一些见解,因为这对我来说仍然是新的。谢谢!

所以我首先尝试像这样的简单测试 -

 it("should call callback function.", function() {
crowdControl.get();
//callback should fire?
expect(callback).to.have.been.called;

});

最佳答案

实现你想要的简单方法是这样的:

CrowdControl.prototype.get = function(callback) {
callback = callback || function callback(error, response, body) {
if (error) {
reject(error);
} else {
resolve(body);
}
};
var options = this.optionsFor('GET');
return q.Promise(function(resolve, reject) {

callback();
request(options, callback);
});
};

您现在可以在测试时注入(inject)函数(如果未提供参数,它将使用真正的实现)。

CrowdControl.get(someFakeFunction);

关于Javascript 单元测试,测试命中函数内的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29953903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com