Макет фс модуля в шутку - PullRequest
0 голосов
/ 09 ноября 2019

Я пытаюсь смоделировать модуль fs следующим образом:

jest.mock('fs');

И как видно в этом посте - Функция Mock fs с помощью jest

Я должен иметь возможность рассматривать функции внутри модуля как jest.fn() и использовать, например, - fs.existsSync.mockReturnValue(false);.

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

'The "path" argument must be one of type string, Buffer, or URL. Received type undefined'

Iпопытался добавить fs.ts в папку __mocks__ и высмеивать его там - но это не повезло.

Файл, который я пытаюсь проверить, является классом и импортирует fs. Я создаю новый экземпляр класса в методе beforeEach jest.

Итак, вообще говоря, я не очень хочу создавать файл или видеть, существует ли он, я хочу получить поддельное возвращаемое значение илиреализации и просто проверьте, с какими параметрами были вызваны функции модуля fs.

1 Ответ

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

Похоже, что запуск jest и насмешка над файловой системой в любом случае приводят к конфликту, так как jest также использует модуль fs для управления запуском.

Единственное решение, которое я нашел, чтобы преодолеть эту проблему:

export class SomeClass {
    fs: typeof fs;
    constructor() { this.fs = fs }
    ///code
}

Копируйте методы fs, как в тесте:

someClass.fs = {
    mkdirSync: jest.fn()
} as any;

Утверждение:

expect(someClass.fs.mkdirSync).toBeCalledWith('parameters');
...