Как утверждать на функции обратного вызова внутри объектов в шутку? - PullRequest
0 голосов
/ 11 октября 2019

У меня есть настройка реагирования на редуксы и библиотека реагирования на тестирование для тестирования. Мой компонент отправляет действие с необходимой информацией, а также обратный вызов по окончании. Но при попытке смоделировать шутку вызова 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...