Как шпионить за экспортированной и имитируемой функцией в шутку

Я пытаюсь имитировать модуль (у которого есть экспортированная функция [и это тоже издевается]).

Я хотел бы проследить за экспортированной функцией, чтобы убедиться, что она чем-то вызвана.

Это мой код ...

import { addNewPaymentMethod } from '../src/service'

jest.mock('../src/service', () => ({
  addNewPaymentMethod : (paymentMethodInfoModel) => {
    let responseFromApi = {responseStatus:{name:'blah'}};
    return Promise.resolve(responseFromApi);
  }
}))

import { createNewPaymentMethod } from '../src/actions/paymentMethod'

test('test expect', () => {
  createNewPaymentMethod({owNickName:'nName',id:22})();

  //this is the bit I don't know how to do
  //...
  jest.spyOn(addNewPaymentMethod);
  expect(addNewPaymentMethod).toBeCalledWith({some:object});
});
1
0
322
1

Ответы 1

Вы можете определить макет с помощью jest.fn ().mockResolvedValue (значение)

jest.mock('../src/service', () => ({
  addNewPaymentMethod : jest.fn().mockResolvedValue({
    responseStatus: {
      name:'blah'
    }
  })
}))

а затем, поскольку это jest.fn (), вам не нужно за ним шпионить :) но обратите внимание, что, поскольку он асинхронный (использует обещания), вам нужно либо привязать его к методу (и использовать return):

it('should have been called with data', () => {
  const data = {};
  return service.methodWhichCallsDependencysaddNewPaymentMethod(data).then(() => {
    return expect(addNewPaymentMethod).toHaveBeenCalledWith(data);
  });
});

или используйте async / await:

it('should have been called with data', async () => {
  const data = {};
  await service.methodWhichCallsDependencysaddNewPaymentMethod(data);
  expect(addNewPaymentMethod).toHaveBeenCalledWith(data);
});

Я настроил рабочий пример

Проблема заключается в использовании «службы», потому что у меня нет «службы». AddNewPaymentMethod экспортируется как константа из модуля (вместе с другими константами, такими как deletePaymentMethod). Как мне написать свой первый тест, чтобы учесть это?

Exitos 16.08.2018 07:29

Другие вопросы по теме