如何使用Jest模拟出reducer中的功能

时间:2018-07-30 06:11:01

标签: javascript reactjs jestjs reducers

我有一个减速器,它说的是这样的:

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

myResult函数在reducer上方的同一文件中定义

当前我的测试失败,因为传递给myResult的值是不确定的

如何使用玩笑来嘲笑此功能?

我知道我可以做到:

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

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

我觉得我想做类似的事情

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

但我不确定这是否可行,因为测试reducer的方法是先获得一个初始对象,一个预期的对象结果,然后通过一个动作。而我要测试的功能属于reducer的结果对象关键字内

有意义吗?

1 个答案:

答案 0 :(得分:0)

我通常做的是以下事情:

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

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);

希望这会有所帮助。