奇怪的javascript范围问题
我面临着(对我来说)奇怪的javascript范围问题,如下所述。感谢你的指点 测试“成功手动提交卡夫卡”成功奇怪的javascript范围问题,javascript,scope,sinon,Javascript,Scope,Sinon,我面临着(对我来说)奇怪的javascript范围问题,如下所述。感谢你的指点 测试“成功手动提交卡夫卡”成功 对于(mqClient.commit.called).to.be.true断言,测试“手动提交到Kafka失败”失败,并显示消息“预期false为true” describe('samplelistener tests', () => { let sandbox const mqClient = { on: sinon.spy(), send: sinon.spy(),
对于(mqClient.commit.called).to.be.true断言,测试“手动提交到Kafka失败”失败,并显示消息“预期false为true”
describe('samplelistener tests', () => {
let sandbox
const mqClient = { on: sinon.spy(), send: sinon.spy(), commit: sinon.stub() }
it('successful manual commit to Kafka', () => {
samplelistener.start(mqClient, {}, log)
const handler = mqClient.on.getCall(0).args[1] // get the message event handler
// call the samplelistener handler
handler('randomtopicname', exampleMessage)
expect(mqClient.commit.called).to.be.true // eslint-disable-line
})
it('failed manual commit to Kafka', () => {
mqClient.commit = sinon.stub().throws()
samplelistener.start(mqClient, {}, log)
const handler = mqClient.on.getCall(0).args[1] // get the message event handler
// call the samplelistener handler
handler('randomtopicname', exampleMessage)
expect(mqClient.commit.called).to.be.true // eslint-disable-line
})
it('failed manual commit to Kafka check 2', () => {
mqClient.commit = sinon.stub().throws()
samplelistener.start(mqClient, {}, log)
const handler = mqClient.on.getCall(0).args[1] // get the message event handler
// call the samplelistener handler
handler('randomtopicname', exampleMessage)
expect(mqClient.commit).to.throw(Error) // eslint-disable-line
})
}
//sampleListener.js
const start = (mqClient, sampleConfig, log) => {
mqClient.on('message', (topic, message) => {
mqClient.commit()
}
}
为什么你确定它与范围有关?我宁愿说它与你的存根有关。如果它
thows
,那么它会被调用吗?我希望你能确认它确实抛出了一个错误,而不仅仅是检查它是否被调用。是的,我不相信你真的调用了回调。或者您确实这样做了,但是即使调用了commit
,即使它抛出了一个错误,这也算是调用了commit。但我可能错了。我添加了sinon
标记,因为我对库不太了解,不知道它在这种情况下应该做什么。谢谢您的评论。我想这是因为sinon的工作方式,我尝试了失败测试用例2,它成功了。