0

ブラウザーの幅を取得する関数を提供する requirejs モジュールを定義します。

browserTool.js

define(['jquery'], function($) {
    return {
        getBrowserWidth: function() {
            return $(window).width();
        }
    }
});

今、ユニットテストを書きたいので、モックしたいjquery

define(['jquery', 'browserTool'], function(jquery, browserTool) {
   describe("test", function() {
      it("should do something", function() {
         spyOn(jquery, "apply").and.returnValue({
            width: function() { return 300; }
         }); 
         expect(browserTool.getBrowserWidth()).toEqual(300);
      });
   });
});

私が使用したいことがわかります: spyOn(jquery, "apply")to mock, しかし、このテストは機能しません.私は間違った方法をスパイしたようです.

修正方法は?

4

1 に答える 1

2

jQuery セレクターは毎回異なるオブジェクトを返すため、jQuery セレクターを直接スパイすることはできません。参照を取得できない場合の Jasmine SpyOn の一般的なトリックは、スパイをプロトタイプに配置することです。jQuery を使用すると、次のようになります。

//spyOn $(window).width():
spyOn($.fn, 'width').

必要に応じて、スパイ呼び出しの引数からパラメーターを抽出できます (つまり、ウィンドウで呼び出されたことを確認します)。

apply については、apply は純粋な JavaScript メソッドであり、jQuery の一部ではないため、それが属する関数プロトタイプを介してスパイできる可能性があります。

spyOn(Function.prototype, 'apply');

(ただし、このコードは試していません)

于 2014-09-30T15:50:37.990 に答える