【发布时间】:2020-11-13 09:29:12
【问题描述】:
我正在尝试在 js 文件 'eslModule.js' 中测试以下方法,但没有成功
async function exec(cmd, args, ip, port) {
const connPromise = new Promise(function(resolve, reject) {
try {
sock = new esl.Connection(ip, port, 'pwd', function() {
sock.bgapi(command, function(result) {
if (sock && sock.socket.writable && sock.socket.readable) {
sock.disconnect();
}
return resolve({
result: result.body
});
});
});
} catch (error) {
return reject(error);
}
sock.on('error', function(error) {
if (sock === null) {
return false;
}
if (error.code === 'ERR1' || error.code === 'ERR2') {
error.message = `Connection failed: [${error.code}]`;
}
if (sock && sock.socket.writable && sock.socket.readable) {
sock.disconnect();
}
return reject(error);
});
try {
await connPromise;
} catch (error) {
sock = null;
throw error;
}
});
}
这就是测试的样子
const esl = require('modesl');
const eslModule = rewire(`<PATH TO MODULE>`);
(...)
it('It should return a valid response', async function () {
const cmd = "c";
const args = "t";
const ip = "127.0.0.1";
const port = '<port>'
const expResp = {
result: '+OK---- 00000000-0000-0000-0000-000000000000'
}
stub1 = sinon.stub(esl, 'Connection').yields(ip, port, 'pwd',expResp);
const result = await eslModule.exec(cmd, args, ip, port);
expect(result).resolves.to.deep.equal(expResp);
sinon.assert.calledOnce(stub1);
});
但我没有让它工作,因为测试进入了 Promise,然后在 sock.bgapi 回复无法访问未定义的 bgapi...
如果我尝试模拟错误(在 sock.on('error' ...) 中,我会得到类似的回复,即 .on 不是方法。
【问题讨论】:
标签: node.js unit-testing chai sinon