我想在类上模拟一个方法,以便调用一个虚拟方法,我可以获取统计数据,例如调用它的次数等等。
我正在尝试使用Sinon这样做,但实际的方法仍然被调用(并且验证没有注册调用)
我正在使用Sinon和Jest ...是的我知道Jest有它自己的模拟/存根/间谍功能但我在Node中遇到了麻烦所以我正在看Sinon。我不能使用摩卡而不是通常与诗乃(叹息,公司)配对的开玩笑。
测试
const sinon = require('sinon')
const Cache = require('../../../adapters/Cache')
const Fizz = require('../Fizz')
describe('CACHE', () => {
it('should return a mock', () => {
const mockCache = sinon.mock(Cache.prototype, 'retrieveRecords')
const fizz = new Fizz()
fizz.doStuff()
mockCache.expects('retrieveRecords').once()
mockCache.verify()
})
})
嘶嘶声
const Cache = require('../../adapters/Cache')
const Thing = require('../../adapters/Thing')
class Fizz {
doStuff() {
const thing = new Thing()
const cache = new Cache()
return cache.retrieveRecords('foo')
}
}
module.exports = Fizz
答案 0 :(得分:0)
我的语法错了。需要调用mockCache.expects('retrieveRecords')
使其不能调用真正的方法,我认为这算了调用,但这是我从RTFM获得的。这有效:
const sinon = require('sinon')
const Cache = require('../../../adapters/Cache')
const Fizz = require('../Fizz')
describe('CACHE', () => {
it('should return a mock', () => {
const mockCache = sinon.mock(Cache.prototype)
const expectation = mockCache.expects("retrieveRecords")
expectation.once()
const fizz = new Fizz()
const res = fizz.doStuff()
mockCache.verify()
})
})