同じファイル内の別の関数をスタブしながら、ファイル内の関数を単体テストしようとしていますが、モックが適用されておらず、実際のメソッドが呼び出されています。 次に例を示します。
// file: 'foo.js'
export function a() {
// .....
}
export function b() {
let stuff = a(); // call a
// ...do stuff
}
そして私のテスト:
import * as actions from 'foo';
const aStub = sinon.stub(actions, 'a').returns('mocked return');
actions.b(); // b() is executed, which calls a() instead of the expected aStub()
これが標準のES5でどのように見えるかを考えてください。 各関数は、exportsオブジェクトで特定の名前でエクスポートされますが、関数名を使用して内部的に参照することもできます。 私たちは2つの異なる参照について話している。 スタブするときは、外部参照を変更します。 内部参照は同じに保たれます。 明示的な依存性注入を作成する場合を除いて、変更することはできません(内部使用のセッター関数など)。 これはバグではありませんが、JavaScriptの機能です。
これに関する回避策はありますか?nodejsファイルをテストするときにこの種の問題に遭遇することは非常に一般的です。
これについては、ドキュメントの「方法」セクションで説明しています。
http://sinonjs.org/how-to/link-seams-commonjs/