如何测试包含时间参考的REDUX动作

上下文

我目前正在为我的React应用程序测试一些REDUX操作。这些动作之一存储了检索到某些数据的时间,但是我不确定测试该动作的方式。

目前,这大致相当于该动作:

export const receiveFruit = (fruitName,fruitData) => {
    return {
        type: RECEIVE_MAP,receivedAt: Date.now(),fruitName: fruitName,data: fruitData ? fruitData : "no_data"
    }
};

测试

现在,关于我使用JEST进行的测试,但是也许还有其他方法可以测试上述动作。我通常会在documentation on testing with REDUX中做类似的事情:

test("Should create an action to receive a fruit",() => {
    const fruitName = "banana";
    const fruitData = {isTasty: true,isBlue: false};
    const receivedAt = Date.now(); // <- Here this won't match the other action of course
    const expectedaction = {
        type: actions.RECEIVE_MAP,receivedAt: receivedAt,data: fruitData
    };
    expect(actions.receiveFruit(fruitName,fruitData)).toEqual(expectedaction)
});

当然,由于两个操作之间的时间差,这将使测试失败。结果,我为该操作添加了“ receivedAt”参数。因此可以为接收时间提供一个值,以使其与测试时间相匹配,因此到目前为止,这已经涵盖了测试:

export const receiveFruit = (fruitName,fruitData,receivedAt=Date.now()) => {
    return {
        type: RECEIVE_MAP,data: fruitData ? fruitData : "no_data"
    }
};

尽管该解决方案有效,但是即使有人提供说明,如果有人在代码库中输入了一些错误的信息,也很容易出错。我相信可能会有一种“更智能”的方式来做到这一点,例如冻结时间或其他事情,但是我找不到合适的方式来做到这一点。

那么,如何正确测试包含时间参考的REDUX操作?

ezeke123 回答:如何测试包含时间参考的REDUX动作

您可以像往常一样模拟功能

const mockNowFn = 
jest.spyOn(Date,'now').mockImplementation(() => 
1573149880417);
// ... write your tests here
mockNowFn.mockRestore();

但是有更多方法可以在这里阅读有关它们的信息: https://github.com/facebook/jest/issues/2234

本文链接:https://www.f2er.com/3145825.html

大家都在问