Как использовать resetMocks: true с заводскими проверками модуля - PullRequest
1 голос
/ 04 июня 2019

Я хотел бы макетировать импортированные модули, сохраняя свои юнит-тесты независимыми друг от друга.

Настройка resetMocks: true в моем конфигурационном файле Jest означает, что поведение, настроенное с использованием заводской проверки модуля , потеряно ( проблема ). Настройка модуля для других способов не работает (, проблема ).

Изменение на resetMocks: false объединяет модульные тесты и определяет порядок их выполнения, что противоречит передовым методам модульного тестирования.

Я пытался позвонить jest.mock('./a', () => {/* implementation */}) внутри beforeEach() и на вершине test(). Я также попытался использовать ссылку на jest.fn() внутри фабричного макета модуля, а затем вызвать .mockImplementation() для этой ссылки.

Минимальная демонстрация:

// greeter.ts
export class Greeter {
    sayHello(): string {
        return 'hello world!';
    }
}
// module-mocking.spec.ts
import { Greeter } from "./greeter";

jest.mock('./greeter', () => ({
    Greeter: jest.fn(() => ({ sayHello: () => 'goodbye world!' }))
}));

test('mocked module behaviour should exist', () => {
    const result = new Greeter().sayHello();

    expect(result).toEqual('goodbye world!');
});

Этот тест не пройден с ошибкой:

TypeError: (промежуточное значение) .sayHello не является функцией

Перемещение jest.mock() внутри beforeEach() или test() приводит к:

Ожидается: "Прощай, мир!" Получено: "Привет, мир!"

Редактировать

Мне удалось обойти это, используя require вместо import. Вопрос по-прежнему остается для импорта ES6.

// module-mocking.spec.ts
const greeter = require("./greeter");

let mockGreeter: any;

beforeEach(() => {
    mockGreeter = { sayHello: () => 'goodbye world!' };
    greeter.Greeter = jest.fn(() => mockGreeter);
});

test('mocked module behaviour should exist', () => {
    const result = new Greeter().sayHello();

    expect(result).toEqual('goodbye world!');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...