在Jest测试中模拟文件系统

时间:2017-12-04 04:13:22

标签: javascript node.js unit-testing jestjs

我正在为图形模块编写一些测试,作为这些测试的一部分,我需要一种方法来模拟fs模块,这样我就可以断言数据已经存在写入我的假文件系统,并允许我的假文件系统提供假数据,以测试文件系统中读取

我知道jest支持"手动模拟"在此处创建静态模拟对象作为代码旁边的文件。就个人而言,如果可能的话,我宁愿避免这种情况,而是使用jest.fn和/或jest.doMock在我的测试文件中定义我的模拟内联。

the documentation,我觉得这应该是可能的,我觉得我大约有75%的人声称我的模拟fs.createWriteStream被一个参数调用了。我似乎无法弄清楚如何断言数据已写入我的模拟fs

我也知道npm上有各种mock-fs或类似的模块。如果可能的话,我宁愿避免使用这些,并使用jest提供的工具完全解决这个问题。

到目前为止,这是我的测试代码:

const fs        = require('fs');
const pureimage = require('pureimage');

jest.mock('fs', () => ({
    createWriteStream: jest.fn((file_name) => {
        return file_name;
    })
}));

describe('PNG image', () => {
    it('can be encoded to a stream', () => {
        const PImage = pureimage.make(200, 200);
        const context = PImage.getContext('2d');

        context.fillStyle = 'rgba(255,0,0, 0.5)';
        context.fillRect(0, 0, 100, 100);

        expect(pureimage.encodePNGToStream(PImage, fs.createWriteStream('myimage.png'))).resolves;
    });

});

可在此处找到完整项目:http://github.com/robertmain/node-pureimage

1 个答案:

答案 0 :(得分:-1)

我最终传递了一个直通流并在其上做出了断言