我正在为一个图形模块编写一些测试,作为这些测试的一部分,我需要一种方法来模拟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
我最终传入了一条直通流,然后对此做出了断言