Sinon mock正在调用真正的方法

时间:2018-03-31 19:20:23

标签: node.js jestjs sinon

我想在类上模拟一个方法,以便调用一个虚拟方法,我可以获取统计数据,例如调用它的次数等等。

我正在尝试使用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

1 个答案:

答案 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()
      })
    })