开玩笑模拟'fs'模块

时间:2019-11-08 22:15:29

标签: node.js typescript jestjs fs

我试图像这样模拟fs模块:

jest.mock('fs');

正如这篇文章中所见-Mock fs function with jest

我应该能够将模块内部的功能视为jest.fn()并使用-例如fs.existsSync.mockReturnValue(false);

但是这似乎不起作用,打字稿给了我很多错误。 我要做的只是断言一些mkdirSync之类的函数,它们已经被调用了time或带有一些参数,而我似乎正在遇到此错误-

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

我试图将fs.ts添加到__mocks__文件夹中并在其中进行模拟-但这并不幸运。

我要测试的文件是一个类,并且导入了fs。我正在beforeEach开玩笑的方法中创建一个新的类实例。

因此,一般而言,我不太在意创建文件或查看文件是否存在,我希望有一个模拟的返回值或实现,而只需检查fs模块功能使用了哪些参数叫。

1 个答案:

答案 0 :(得分:0)

运行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');