【问题标题】:How to mock out a function in reducer using jest如何使用 jest 在 reducer 中模拟一个函数
【发布时间】:2019-01-06 08:18:08
【问题描述】:

我有一个减速器,它说做这样的事情:

return {
        ...state,
        result: myResult(valA, valB)
}

并且myResult函数定义在reducer上面的同一个文件中

目前我的测试失败,因为我传递给 myResult 的值是未定义的

如何使用 jest 模拟这个函数?

我知道我能做到:

const myMock = jest.fn()
myMock.mockReturnValueOnce(10)

但是我如何具体告诉测试文件它应该在主文件中模拟哪个实际功能?

我觉得我想做类似的事情

import { myResult } from './index'
myResult = jest.fn()
myResult.mockReturnValueOnce(someObject)

但我不确定这是否可行,因为测试减速器的方法是拥有一个初始对象,一个预期的对象结果,然后通过一个动作。而我要测试的函数属于reducer中的结果对象键

这有意义吗?

【问题讨论】:

    标签: javascript reactjs jestjs reducers


    【解决方案1】:

    我通常做的事情如下:

    首先,我在需要我正在测试的类之前模拟我的对象:

    jest.doMock('dependancy', () => {
        return {
            doSomething: () => {
                return {
                    set: jest.fn(),
                    get: jest.fn()
                };
            }
        };
    });
    

    然后在执行时我提取传递给模拟的参数,例如

    myObject.myFunction(extension);
    expect(dependancy.get).toHaveBeenCalled();
    const callback = dependancy.get.mock.calls[0][1];
    

    然后只需自己执行回调并提取任何其他参数或将任何其他模拟传递给回调参数。

    callback(undefined, undefined);
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 2020-02-15
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2021-08-11
      相关资源
      最近更新 更多