Насмешка над функцией из импортированного файла, но также проверка, что она была вызвана - PullRequest
0 голосов
/ 16 октября 2019

Файл, который я тестирую, импортирует функцию из другого файла. Чтобы не запускать эту внешнюю функцию, я смоделировал импорт:

jest.mock("./anotherFile", () => ({
  outsideFunc: jest.fn()
}));

Однако теперь мне нужно написать модульный тест для функции, чтобы проверить, вызывается ли outsideFunc. Не заботиться о возврате, просто он вообще был вызван.

Тестируемая система

function myFunc() {
  outsideFunc();
}

Тест

describe("Testing myFunc", () => {
    it("Should call outsideFunc", () => {
      myFunc();
      expect(outsideFunc).toHaveBeenCalled();
    });
  });

Когда я запускаю тест, я получаю:

ReferenceError: outsideFunc не определен

Я понимаю, почему я получаю эту ошибку,обычно у меня было бы что-то вроде

const outsideFuncMock = jest.fn() 

Но в этом случае я уже высмеивал функцию, когда выполнял импорт, чтобы остановить ее вызов, поэтому я немного растерялся.

Мой тестовый набор

jest.mock("./anotherFile", () => ({
  outsideFunc: jest.fn()
}));

describe("Testing myFunc", () => {
  it("Should call outsideFunc", () => {
    myFunc();
    expect(outsideFunc).toHaveBeenCalled();
  });
});

1 Ответ

1 голос
/ 16 октября 2019

Вы почти у цели, вот решение:

структура папки:

.
├── anotherFile.ts
├── index.spec.ts
└── index.ts

0 directories, 3 files

index.ts:

import { outsideFunc } from './anotherFile';

export function myFunc() {
  outsideFunc();
}

anotherFile.ts:

export const outsideFunc = () => 1;

index.spec.ts:

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

jest.mock('./anotherFile.ts', () => ({
  outsideFunc: jest.fn()
}));

describe('Testing myFunc', () => {
  it('Should call outsideFunc', () => {
    myFunc();
    expect(jest.isMockFunction(outsideFunc)).toBeTruthy();
    expect(outsideFunc).toHaveBeenCalled();
  });
});

Результат модульного теста со 100% покрытием:

 PASS  src/stackoverflow/58413956/index.spec.ts
  Testing myFunc
    ✓ Should call outsideFunc (4ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |      100 |      100 |      100 |      100 |                   |
 index.ts |      100 |      100 |      100 |      100 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        3.129s, estimated 7s

Исходный код: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58413956

...