gpt4 book ai didi

node.js - 使用Mocha/Chai测试NodeJS匿名回调代码

转载 作者:太空宇宙 更新时间:2023-11-03 22:14:53 26 4
gpt4 key购买 nike

我是单元测试新手。我正在 Node.js 中工作,并且正在使用 async module 。这是我正在使用的代码:

module.exports = {
postYelp: function (cb, results) {
if (results.findLocation) {
results.client.post(['resources', 'Yelp'].join('/'), results.findLocation, function (err, data, ctx) {
/* istanbul ignore next */
if (err) {
cb(err);
} else {
console.log('data', data);
console.log('ctx', ctx.statusCode);
return cb(null, ctx.statusCode);
}
});
}
/* istanbul ignore next */
else cb(null);
},
}

如您所见,results.client.post 函数调用中的第三个参数是匿名回调。

我想要测试此回调的覆盖范围。如果我可以轻松地重构以创建一个与回调具有相同代码的命名函数并替换它,我就可以单独测试它。但是,封闭函数(“postYelp”)有自己的回调(“cb”),必须在匿名回调函数内使用。

如何对这个匿名函数代码进行单元测试?

最佳答案

好吧,我明白了。我不必重构,只需找到一种将参数传递给匿名回调的方法。代码如下:

    describe('when postYelp method is called', function() {
it('should call the post method', function() {
var cbspy = sinon.spy(cb);
var post = sinon.stub(client, 'post');
var results = {};
results.client = {};
results.client.post = post;
results.findLocation = {'id': 'lyfe-kitchen-palo-alto'};
post.callsArgWith(2, null, {'statusCode': 201}, {'statusCode': 201});
helpers.postYelp(cbspy, results);
assert(cbspy.called);
client.post.restore();
});
});

基本上,我使用 sinon 创建内部函数的 stub (client.post)。我需要测试文件中的客户端和 OUTER 函数。这一行允许我向内部函数提供正确的参数:

post.callsArgWith(2, null, {'statusCode': 201}, {'statusCode': 201});

“2”表示匿名回调是 post 方法的函数调用中的第三个参数。 “null”是“err”参数,对象“{'statusCode': 201}”实际上可以是任何值。

关于node.js - 使用Mocha/Chai测试NodeJS匿名回调代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32190722/

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