上下文
我目前正在为我的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操作?