【发布时间】:2019-11-24 00:15:21
【问题描述】:
我正在为我的一个异步函数编写单元测试,它正在从中调用另一个异步函数,我想存根该异步调用并返回我想要的值。
我已经使用sinon.stub 对函数进行了存根,并尝试使用sandbox.create() 仍然没有运气。仍然是 mu 函数调用原始函数,我收到超时错误,我已将超时设置为 15000。
这是我调用另一个同步函数的函数
async function performMaccheckPortbounce(requestBody){
return new Promise(async (resolve, reject) =>{
const trunkCheckResult = await performportTrunkCheck(requestBody);
var isTrunked = trunkCheckResult.toString().match(/switchport mode trunk/);
console.log('isTrunked -> '+isTrunked);
console.log(JSON.stringify(isTrunked));
if (isTrunked == 'switchport mode trunk') {
return resolve("ERROR_CODE_INVALID_PORTMODE");
}
});
}
async function performportTrunkCheck(requestBody){
return new Promise((async (resolve, reject) => {
var dataOut = [];
let config = global.sw_config;
config.hostname = requestBody.hostname;
let port_number = requestBody.port_number;
let command = `sh run interface ${port_number}`;
var conn = new Client();
conn.on('ready', function() {
console.log('Client :: ready');
conn.shell(function(err, stream) {
if (err) throw err;
stream.on('close', function() {
console.log('Stream :: close trunk');
console.log(dataOut.toString());
conn.end();
return resolve(dataOut.toString());
}).on('data', function(data) {
dataOut.push(data.toString().split("\r\n"));
console.log('STDOUT: ' + data);
}).stderr.on('data', function(data) {
console.log('STDERR: ' + data);
});
var response = stream.end(command+"\nexit");
console.log(response);
});
}).connect(config)
}));
}
这是我的测试代码
describe('Mac Check Portbounce Test', function(){
let PortTruncChek,sandbox
let requestBody = {'hostname': 't9394labswt0001',
'port_number':'gi4/0/1',
'mac_address' : 'a899.69e3.bec0'
}
}
before(function(){
sandbox = sinon.sandbox.create()
})
after(function(){
sandbox.restore()
})
it("Should Return Invalid PORT MODE", async function(done){
this.timeout(15000)
requestBody.mac_address = 'a899.69e3.bec0';
sandbox.stub(macCheck, 'performportTrunkCheck').returns(Promise.resolve('/switchport mode trunk/'));
let result1 = await macCheck.performMaccheckPortbounce(requestBody);
assert.equal(result1,"/switchport mode trunk/");
done();
})
})
它实际上是调用函数 performportTrunkCheck 并抛出错误
1) Mac Check Portbounce 测试
Should Return Invalid PORT MODE:
Error: Timeout of 15000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/z003878/Network_API/NetworkApi/network-switch-configurations-v1-maccheckportbounce/test/maccheckportbounce-test.js)
【问题讨论】:
-
在您的函数
performMaccheckPortbounce中,如果您的条件if (isTrunked == 'switchport mode trunk')不成立,应该返回什么? -
可能改变这个:`sandbox.stub(macCheck, 'performportTrunkCheck').returns(Promise.resolve('/switchport mode trunk/'));` 到这个:
.resolves('/switchport mode trunk/') -
@AndrewNolan 试过
sandbox.stub(macCheck, 'performportTrunkCheck')..resolves('/switchport mode trunk/')还是一样的错误。
标签: node.js unit-testing mocha.js sinon chai