Node依存関係をモックするとき、私は次のライブラリに遭遇しました:
それらはすべて、ほぼ同じことを行うように見えます:require()
呼び出しをモックできるようにします(ほとんどすべてをモックするSinonを除く)。それらはすべて、かなり複雑なセットアップを必要とするようです。require
に渡される文字列の正確な構文に注意してください。リファクタリング中は大きくありません。
各ライブラリの長所と短所は何ですか?どちらを選択するのですか?各ライブラリが優れているユースケースの例は何ですか?この分野で他に優れている製品は何ですか?
それは完全に不正行為のように感じますが、誰も質問に答えていないので、ここに行きます:
Proxyquireはrequire
を継承し、依存関係チェーンのどこにでも偽物を注入できます。 require
sを引き継ぐことはせず、require
sを定義しないメソッドを引き継ぐことは、元に戻ります。これはnoCallThru
で無効にできます。したがって、それはまだ元のものをロードし、あなたが定義したもので物事を置き換えるだけです。 RewireやSandboxedModuleとは異なり、require
オーバーロードのグローバル変数を定義することはできません。
Rewireはrequire
を引き継ぎ、__get__
および__set__
プロパティを各モジュールに。プライベート変数名がわかっている場合は、置き換えることができます。依存性注入を考えてください。
SandboxedModuleは、新しいV8 vmでプロセス全体を実行することを除いて、Proxyquireとほぼ同じです。 (このアプローチにはテストごとのパフォーマンスコストがあります。)また、v 1.0には、サポートしていないネイティブモジュールを参照しているものを参照しないと失敗するという厄介なバグがあります。 https://github.com/robrich/sandboxed-module-graceful-fs を参照してください。
Sinonは他の3.のようにrequire
を引き継ぎません。むしろ、より伝統的なモックフレームワークです。指定されたメソッドを偽物に置き換えるか、呼び出されたときに追跡するモックを作成します。