【问题标题】:Mock 'fs' module in jest开玩笑地模拟“fs”模块
【发布时间】:2020-03-05 13:13:00
【问题描述】:

我正在尝试像这样模拟 fs 模块:

jest.mock('fs');

正如在这篇文章中看到的 - Mock fs function with jest

我应该能够将模块内的函数视为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 模块函数被调用的参数。

【问题讨论】:

    标签: node.js typescript jestjs fs


    【解决方案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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 2021-04-28
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多