在Jest测试中模拟文件系统

问题描述 投票:0回答:1

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

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

看看the documentation,我觉得这应该是可能的,我觉得我大约有75%的人声称我的模拟fs.createWriteStream是用1个参数调用的。我似乎无法弄清楚如何断言数据写入我的模拟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

javascript node.js unit-testing jestjs
1个回答
-1
投票

我最终传入了一条直通流,然后对此做出了断言

© www.soinside.com 2019 - 2024. All rights reserved.