У меня есть настройка реагирования на редуксы и библиотека реагирования на тестирование для тестирования. Мой компонент отправляет действие с необходимой информацией, а также обратный вызов по окончании. Но при попытке смоделировать шутку вызова dispatch
кажется, что сравниваются ссылки на функции, а не на их тела, что имеет смысл, но есть ли способ вообще разобраться с такими случаями?
// the store is mocked
store.dispatch = jest.fn();
...
expect(store.dispatch).toHaveBeenNthCalledWith(3,
postData({ data: 'abc' }, () => doSmth());
Я получаю эту немного странную ошибку:
Expected: {"callback": [Function anonymous], "payload": {"id": 2, "data": "abc" }, "type": "POST_DATA"}
Received
2: {"id": 2, "type": "POST_DATA"}
-> 3
@@ -1,7 +1,7 @@
Object {
- "callback": [Function anonymous],
+ "callback": [Function callback],
Любые подсказки приветствуются!
Редактировать: То, что я пытаюсь утверждать, это объект действия, возвращаемый создателем действия. В коде я поместил код обратного вызова для запуска после завершения действия. поэтому в контексте postData({ data: 'abc' }, () => dosmth())
вернет { type: POST_DATA, payload: { data: 'abc' }, callback: () => dosmth() }
.
Хотя равенство данных можно легко установить здесь, равенство функций не может.
Edit2: Так что мое решение - игнорировать детальобъекта должен был использовать expect.objectContaining
, чтобы сравнить часть объекта, которая мне нужна, и отбросить часть обратного вызова.
// the callback in the `action` object is null, so just delete it
// from the object to assert on it
const action = postData({ data: 'abc' });
delete action.callback;
expect(store.dispatch).toHaveBeenNthCalledWith(3,
expect.objectContaining(action));