在我的nodejs服务器中,我想用Mocha模拟fs进行测试。 我最终使用了Mockery,但我真的误解了一个概念。
在我的测试中(我也使用Typescript):
// mock for fs
var fsMock = {
readdir: (path: string) => { return { err: undefined, files: [] } },
writeFile: (path: string, content: string, encoding: string) => { return { err: undefined } },
readFileSync: (path: string, encoding: string) => { return "lol" }
};
Mockery.registerMock('fs', fsMock);
beforeEach((done) => {
Mockery.enable({
useCleanCache: true,
warnOnReplace: false,
warnOnUnregistered: false
});
}
afterEach(() => {
Mockery.disable();
});
但不幸的是,在我的测试中,我的模块仍然使用旧的fs。我理解为什么不工作。的确,在我的测试中,我:
现在的问题是:如何告诉我的模块重新要求其依赖项使用我的模拟版本的fs?而在全球范围内,我如何轻松地模拟fs?
感谢。
答案 0 :(得分:3)
最后,经过测试和测试,我最终没有使用mockery
,而是使用SinonJS
。它提供了一种非常简单轻松的方式来模拟fs
,例如:
import * as Fs from "fs"
import * as Sinon from "sinon"
// ..
// At a place inside a test where the mock is needed
Sinon.stub(Fs, "readdir").callsFake(
(path: string, callback: Function) => { callback(null, ['toto']) }
);