【发布时间】:2017-04-27 22:54:30
【问题描述】:
我正在使用mock-fs 尝试测试我编写的 Webpack 插件,该插件修改了我的文件系统上的文件。
这是测试:
test('writes chunks to build/assets.json if no json file present', () => {
mockFs({
[buildDir]: {},
});
const stats = new Stats({
assetsByChunkName: {
main: 'main.somecrazyhash12341213445345.js',
},
});
const compiler = new Compiler(stats);
const plugin = new ChunksToJsonPlugin(config);
expect(fs.existsSync(assetFilePath)).toBe(false);
plugin.apply(compiler);
compiler.execHandler();
expect(fs.existsSync(assetFilePath)).toBe(true);
expect(fs.readFileSync(assetFilePath, 'utf-8')).toEqual(
JSON.stringify({
main: 'main.somecrazyhash12341213445345.js',
})
);
mockFs.restore();
});
当我单独运行它时它运行良好,但是当我将它作为套件的一部分运行时,其他测试(不使用mock-fs)会中断。
我注意到 mock-fs 在堆栈跟踪中,这让我相信文件系统也在这些测试中被模拟(我不想要)。
mock-fs 声明:
mock-fs@4 版本将包含重大更改。该库不再覆盖内置
fs模块的所有方法,而是覆盖process.binding('fs')。此更改的目的是避免与覆盖fs方法(例如graceful-fs)的其他库发生冲突,并使其可以使用多个Node 版本,而无需维护Node 的fs模块的复制和稍微修改的版本。
我不太了解 process.binding 的工作原理,尤其是它与 Jest 并行运行测试有关,但我觉得这是核心问题。
我怎样才能做到这一点?有没有其他方法可以在不使用mock-fs 的情况下测试这种行为?
【问题讨论】:
标签: node.js unit-testing jestjs