Context
В настоящее время я тестирую некоторые действия REDUX для моего приложения React. Одно из этих действий хранит время, когда были получены некоторые данные, но я не уверен в том, как проверить действие.
На данный момент это грубый эквивалент действия:
export const receiveFruit = (fruitName, fruitData) => {
return {
type: RECEIVE_MAP,
receivedAt: Date.now(),
fruitName: fruitName,
data: fruitData ? fruitData : "no_data"
}
};
Тестирование
Теперь, что касается тестирования, я использую JEST, но, возможно, есть и другие способы протестировать вышеуказанное действие. Обычно я бы делал что-то похожее на документацию по тестированию с 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,
fruitName: fruitName,
receivedAt: receivedAt,
data: fruitData
};
expect(actions.receiveFruit(fruitName, fruitData)).toEqual(expectedAction)
});
Конечно, это не пройдёт тест из-за разницы во времени между двумя действиями. Как следствие, я добавил параметр «receiveAt» для действия. Таким образом, можно предоставить значение полученного времени, совпадающее с временем теста, поэтому пока оно охватывает тесты:
export const receiveFruit = (fruitName, fruitData, receivedAt=Date.now()) => {
return {
type: RECEIVE_MAP,
receivedAt: receivedAt,
fruitName: fruitName,
data: fruitData ? fruitData : "no_data"
}
};
Хотя это решение работает, оно неэлегатно, подвержено ошибкам, есликто-то делает неправильный ввод в кодовую базу, даже если есть документация. Я верю, что может быть «умнее» способ сделать это, например, заморозить время или что-то в этом роде, но я не могу найти способ сделать это правильно.
Итак, какправильно проверить действие REDUX, содержащее временную привязку?