Jest.js 模拟从另一个函数返回的简单封闭函数

fruv7luv  于 2022-12-20  发布在  Jest
关注(0)|答案(1)|浏览(206)

我有一个名为fnCreater的函数,它创建了另一个函数:

const fnCreater = (page, extraCondition = false) => () => {
  if (extraCondition) return;
  ViewStore.setCurrentPage = page;
}

我希望能够测试返回的函数是否被调用:

describe('test', () => {
    it('should return a function', () => {
        const fn = fnCreater('CONFIGURATOR')
        expect(typeof fn).toBe('function')
    })

    it('should be able to execute the function from the closure', () => {
        const fn = fnCreater('CONFIGURATOR')
        // const spy = jest.spyOn(fn) // needs a 'module'
        fn();
        expect(fn).toHaveBeenCalled()
    })
})

我对jest不太熟悉,但是测试返回了这个错误:

Matcher error: received value must be a mock or spy function

Received has type:  function
Received has value: [Function anonymous]

我不明白如何修复这个错误,也不明白为什么错误会声明需要spy或mock-- spyOn需要一个对象,mock需要一个模块。fnCreater函数本身返回另一个函数(fn),我想确定 * 那个 * 封闭函数是否被调用过。

xzv2uavs

xzv2uavs1#

您是否正在尝试测试fnCreater或调用它的代码?
如果您正在测试fnCreter本身,则不应嘲笑它。
我建议调用fnCreater,然后调用返回的Function并Assert设置了正确的页面。

相关问题