Макет модуля 'fs' в шутку

Я пытаюсь издеваться над модулем fs вот так:

jest.mock('fs');

Как видно из этого поста, имитирует функцию fs с шуткой

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

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

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

Я попытался добавить fs.ts в папку __mocks__ и поиздеваться над ним, но безуспешно.

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

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


person moodseller    schedule 08.11.2019    source источник


Ответы (1)


Похоже, что запуск 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');
person moodseller    schedule 08.11.2019