簡體   English   中英

使用嘲弄模擬fs模塊

[英]Mock fs module using mockery

在我的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是原始的
  • 我在測試前設置了嘲弄
  • 我執行我的測試,失敗因為仍然是使用的原始fs ...

現在問題是:我怎么能告訴我的模塊重新要求它的依賴項使用我的模擬版本的fs? 而在全球范圍內,我如何輕松地模擬fs?

謝謝。

最后,在測試和測試之后,我最終沒有使用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']) }
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM