Jasmine を使用して jQuery の $ 関数をスパイできるかどうか知りたいです。
これは私がテストしたいコードです。
var Wrapper = Wrapper || {};
Wrapper.Controls = {};
/**
* Use an anonymous function to initialize all JavaScript
*/
(function($) {
Wrapper.Controls.Utils = function() {
var external = {
showHide : function(namespace, controlNameStem){
var stem = namespace + controlNameStem;
$(stem + 'Controller').click();
}
};
return external;
};
return Wrapper.Controls.Utils;
}(Wrapper.jQuery));
Wrapper.jQuery は別のファイルにあり、Wrapper をロードする前に Jasmine によってプリロードされます。このように定義されたスタブjQueryが含まれています
var aliasjQuery = {};
var Wrapper = Wrapper || {};
Wrapper.jQuery = aliasjQuery;
これは、Wrapper が初期化されるときに、aliasjQuery が Wrapper.jQuery として無名関数に渡されるオブジェクトであることを意味します。
私の Jasmine テスト仕様は次のようになります。
describe("form control utils", function(){
var controlUtils = Wrapper.Controls.Utils();
var namespace = 'pluto_namespace';
var controlName = 'dualNationality';
it("showHide fires click event on controlNameController", function(){
var control = { click : function(){}};
spyOn(aliasjQuery, '$').andReturn(control);
spyOn(control, 'click');
controlUtils.showHide(namespace, controlName);
expect(control.click).toHaveBeenCalled();
});
});
「どうしてそんなことをしたいの?」というようなコメントも歓迎します。これを見つめるのに時間がかかりすぎたと思うので、代替ソリューション。