我有一个Node模块,我尝试连接到主机:
const testConnection = net.createConnection(port, hostname);
testConnection.on('connect', () => {
// connected
});
testConnection.on('error', (err) => {
// error
});
我正在使用 Sinon 来测试这样的方法:
sinon.stub(net, 'createConnection', (port, hostname) => {
return {
on: (string, cb) => {
switch(string) {
case 'connect':
return cb;
case 'error':
return cb;
case 'close':
return cb;
}
}
}
});
const testConnection = net.createConnection(10, 'hostname');
testConnection.on('error', () => {
console.log('here I am');
});
但是我无法理解我应该如何不应该使用存根/模拟或伪调用on-method,因此它会返回错误!
我在这里错过了什么吗?
答案 0 :(得分:1)
我使用假的EventEmitter实例来存储createConnection
返回值:
const EventEmitter = require('events');
const fakeEE = new EventEmitter();
sinon.stub(net, 'createConnection', (port, hostname) => fakeEE);
// require your code
// emit events
fakeEE.emit('error', new Error('Smth bad happened'));
// observe the result
// e.g. expect(something).toBeCalled();
答案 1 :(得分:0)
由于XY
是模块的依赖关系,我会使用proxyquire伪造该依赖关系。使用ES6 + Babel组合也非常适合我们。