我正在尝试创建单元测试并使用sinon对其进行模拟。这是我简单的应用程序:
var request = require('request');
var MY_CLASS = {
getData: function (req, res, next) {
return request.get({
uri: 'https://xxxx.xxxx.com',
}, function (error, data) {
if (error) {
return next(error, null);
}
request.get({
uri: `https://yyyy.yyyy.com/${data.id}`,
}, function (error, data) {
if (error) {
return next(error, null);
}
return next(null, data);
});
});
}
};
module.exports = MY_CLASS;
现在,如何正确模拟测试套件中针对getData
函数的每个请求?似乎这会嘲笑xxxx.com
和yyyy.com
。换句话说,我想模拟每个人的不同反应
before(()=>{
sinon
.stub(request, 'get')
.yields(null, {statusCode: 200, id: 10});
});
答案 0 :(得分:0)
您可以onFirstCall
, onSecondCall
, onCall(n)
来实现该行为。
before(()=>{
sinon
.stub(request, 'get')
.onFirstCall().yields(null, {statusCode: 200, id: 10})
.onSecondCall().yields(null, {statusCode: 200, id: 11}};
});
最终,您可以使用callsFake(fn)
来实现所需的任何逻辑。