の外にNode.jsのモジュール内のコンストラクタ(またはその他の機能)をモックが、私は、他のテストフレームワークを使用してこの問題を持っているだろうと思います。今、私はBar
をテストしたいと思います私は私のテストを書くためにジャスミンを使用しています。このモジュール
var Bar = exports.Bar = function Bar() {
this.baz = new Baz();
};
var Baz = exports.Baz = function Baz() {
};
が、偽のBaz
実装と:我々はコンストラクタです(ちょうど通常の機能することができる)の二つの機能、Bar
とBaz
、とモジュールfoo
を持っているとしましょう:
var foo = require('foo');
describe("foo.Bar", function() {
it("initializes its own Baz", function() {
spyOn(foo, 'Baz'); // this replaces foo.Baz with a fake implementation
var bar = new foo.Bar();
expect(foo.Baz).toHaveBeenCalled();
});
});
Bar
を外部から変更することができない変数Baz
を使用して新しいBaz
をインスタンス化するための問題は、このテストが失敗することです。 spyOn()
を使用してスワップしまった唯一のものはexports.Baz
です。
明白な解決策はthis.baz = new exports.Baz();
を書くことですが、それは一種のぎこちない感じています。私のモジュールの中で使用したいもっと多くの機能があるなら、私はいつもexports.
接頭辞を使ってそれらのすべてを呼び出さなければなりません。ここに他のアプローチはありますか?
'spyOn(ウィンドウ、 'バズ')を試してみてください;'と '(window.Baz).toHaveBeenCalledを()期待;」。 – Prusse
@Prusse、Nodeは 'window'オブジェクトを持っていないと思います。 –
申し訳ありませんが、グローバルオブジェクトがある場合は、それをそのまま使用できます。 – Prusse