Макет импорта из другого файла, но все равно возвращает фиктивное значение

Я тестирую функцию, которая вызывает другую функцию, импортированную из anotherFile. Этот outsideFunc возвращает объект, который содержит «имя». Мне нужно, чтобы это существовало, чтобы пройти остальную часть моего теста/функцию, чтобы она работала правильно.

systemUnderTest.js

import { outsideFunc } from './anotherFile.js';

function myFunc() {
   const name = outsideFunc().name;
}

другой файл.js:

export function outsideFunc() {
   return { name : bob }
}

Меня не волнует тестирование anotherFile или результат outsideFunc, но мне все равно нужно вернуть фиктивное значение как часть тестирования myFunc;

systemUnderTest.spec.js

describe("A situation", () => {
  jest.mock("./anotherFile", () => ({
    outsideFunc: jest.fn().mockReturnValue({
      name: 'alice'
    })
  }));

  it("Should continue through the function steps with no problems", () => {
    expect(excludeCurrentProduct(initialState)).toBe('whatever Im testing');
  });
});

Проблема, которую я получаю, заключается в том, что когда модульный тест работает через myFunc, const name возвращает undefined, где он должен возвращать alice. Я бы ожидал, что он получит данные из моего jest.mock файла anotherFile и его фиктивной экспортированной функции, но он не получит правильного ответа.

Когда я утверждаю, что ожидаю name = alice, я на самом деле получаю name = undefined.


person user1486133    schedule 16.10.2019    source источник


Ответы (1)


systemUnderTest.js

import { outsideFunc } from './anotherFile.js';

// let's say that the function is exported
export function myFunc() {
   const name = outsideFunc().name;
   // and let's say that the function returns the name
   return name;
}

вы можете описать в своем

systemUnderTest.spec.js

import { myFunc } from './systemUnderTest';
import { outsideFunc } from './anotherFile';

// using auto-mocking has multiple advantages
// for example if the outsideFunc is deleted the test will fail
jest.mock('./anotherFile');


describe('myFunc', () => {
  describe('if outsideFunc returns lemons', () => {
    outsideFunc.mockReturnValue({name: 'lemons'});
    it('should return lemons as well', () => {
      expect(myFunc()).toEqual('lemons');
    });
  });
});

рабочий пример

person Teneff    schedule 16.10.2019