单元测试时使用mock-fs模拟IO返回值

最近换工作到了一家对测试要求比较高的公司,相比以前仅仅完成Appnium完全匹配不同,这里要求使用jest自动化测试覆盖率达到80%+,此处应有jest cheat sheet

工作过程中有很多需要读配置文件的地方,做法是在本地对应位置放上文件,然后配置ignore掉这个文件进行测试,然而这并不是个很优雅的方式(尤其是当代码中有判断此配置是否存在时,需要手动移动文件),此时即可利用mock-fs。

简单使用

const mock = require('mock-fs');

mock({
  'path/to/fake/dir': {
    'some-file.txt': 'file content here',
    'empty-dir': {/** empty directory */}
  },
  'path/to/some.png': Buffer.from([8, 6, 7, 5, 3, 0, 9]),
  'some/other/path': {/** another empty directory */}
});

指定的文件夹地址是默认相对于process.cwd()的,当然也可以配置其它地址。执行mock之后,所有有关IO的部分就都被修改了。

需要注意的地方

decribe('# test', () => {
    const mockfs = require('mock-fs');
    beforeEach(() => jest.resetModule());
    afterEach(() => mockfs.restore());
    it('should do ...', () => {
        const foo = require('foo.js');
        mockfs({...});
        expect(foo)...
    });
})