Jest "jest.mock (...) не перезаписывает оригинальный файл - PullRequest
0 голосов
/ 11 ноября 2019

Итак, я настроил свои макеты точно так же, как в документации (несмотря на то, что мне нужны require и docs, использующие импорт, но это не должно быть проблемой на самом деле)

jest.mock('common-bon/lib/utils/events/EventDomains');
const EventDomains = require('common-bon/lib/utils/events/EventDomains');
...
beforeAll(()=>{

EventDomains.mockImplementation(() => {
    return {
        app: 'Placeholder'
    };
  });
});

Это именно так, как они это делаютздесь: https://jestjs.io/docs/en/es6-class-mocks

Но это не работает. Набор тестов завершается с

TypeError: EventDomains.mockImplementation не является функцией

Что означает, что насмешка просто не сработала.

Контекст для того, что мне нужно для макета: * в исходном коде, который вызывает вызываемая мной функция:

    handler.fireEvent(domain.app);

где "домен" - это то, что я хочу издеваться:

const domain = EventDomains;
const EventDomains = require('common').utils.getEventDomains();

сложный "путь" получается тем, что я использую в jest.mock (...), который работает для других макетов, где мне не нужно менять mockImplementation

Редактировать: я точно знаю, что это часть "jest.mock (...)", которая не работает, потому что, когда я добавил функцию "mockImplementation" в ОРИГИНАЛЬНЫЙ файл, она работала отлично,[имейте в виду, что jest.mock, а также требование, которое было до .mockImplementation, использовали точно такой же путь. Требование находится в верхней части тестового файла, а .mockImplementation находится в "beforeAll) [хотя наличие его непосредственно ниже требования не имеет значения]

1 Ответ

0 голосов
/ 11 ноября 2019

Просто пропустите часть «.mockImplementation»!

Мое решение в тестовом файле:

    beforeAll(()=>{
    EventDomains.app = 'placeholder'    
    });

Вот и все. Никакого сложного ".mockImplementation" и т. Д. Не требуется.

...