1

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();
});



});

「どうしてそんなことをしたいの?」というようなコメントも歓迎します。これを見つめるのに時間がかかりすぎたと思うので、代替ソリューション。

4

2 に答える 2

3

もう試しましspyOn(window, "$")たか?

于 2013-04-08T15:47:10.640 に答える