2017-10-14 19 views
1

私のnodejsサーバでは、私はモカとの私のテストのためにfsを模擬したいと思います。 私はMockeryを使いますが、私は本当に概念を誤解しています。私のテストでモックを使用したモックfsモジュール

(私も活字体を使用):

// 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を使用します。私はなぜ働いていないのか理解していた。確かに、私のテストで、I:

  • は、私はモジュールをインポートすると、私のモジュールはFSとして、その依存関係をインポートします
  • ファイルの先頭に私のモジュールをインポートします。まだ有効になっていないこの時間嘲笑のよう
  • (我々はまだ...テストを実行していない)、私のモジュールにインポートfsは私のテスト
  • 私は実行する前に、元の1つの
  • Iセットアップ嘲笑である私テストは失敗しました。なぜなら、元のfsが使用されているからです...

ここで、問題は次のとおりです。私のモックバージョンのfsを使用するためにモジュールに依存関係を再要求する方法を教えてください。そしてもっと世界的に、どうすれば簡単にfockを模倣できますか?

ありがとうございました。

+0

トリックは、モックを設定した後にテストするモジュールを要求することです。 –

+0

また、私はあなたがモックを登録する前にMockeryを有効にしなければならないと思います –

+0

私はインポートを使用します。これはファイルの先頭でのみ使用できます:( – Adavo

答えて

2

最後に、テストとテストの後、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']) } 
); 
関連する問題