【发布时间】:2017-07-09 19:37:24
【问题描述】:
如何存根 redis 发布方法?
// module ipc
const redis = require('redis');
module.exports = class IPC {
constructor() {
this.pub = redis.createClient();
}
publish(data) {
this.pub.publish('hello', JSON.stringify(data));
}
}
和另一个模块
// module service
module.exports = class Service {
constructor(ipc) {
this.ipc = ipc;
}
sendData() {
this.ipc.publish({ data: 'hello' })
}
}
如何在 IPC 类中存根私有变量 pub?
我可以使用proxyquire 存根redis.createClient,如果我这样做,它会抱怨publish undefined
我当前的测试代码
let ipcStub;
before(() => {
ipcStub = proxyquire('../ipc', {
redis: {
createClient: sinon.stub(redis, 'createClient'),
}
})
});
it('should return true', () => {
const ipc = new ipcStub();
const ipcPublishSpy = sinon.spy(ipc, 'publish')
const service = new Service(ipc);
service.sendData();
assert.strictEqual(true, ipcPublishSpy.calledOnce);
})
【问题讨论】:
标签: javascript unit-testing sinon stub stubbing