3

ボタンのクリックにバインドされている以下の関数があります。TeaserView クラスの一部の下のコード。

addCard: function() {
   if(!this.model.get("loggedIn")){
      Backbone.pubSub.trigger("Signup");
      return;
    }

     this.showAddCardDialog();
  }

これが私のテスト方法です

it("Should trigger signup event when clicked and not logged in", function(){
   Backbone.pubSub = _.extend({}, Backbone.Events);
   signupCallback = jasmine.createSpy("Signup");
   //Backbone.pubSub.on("Signup", signupCallback);
   teaserView = new TeaserView({
     el: "#teaser",
            model: this.model //was created in setup call
     });

     $("#addCard").trigger("click");
     expect(signupCallback).toHaveBeenCalled();
    });

しかし、Backbone.pubSub カスタム イベントが呼び出されたかどうかを確認するテストは失敗します。このイベントのリッスンを正しくテストするにはどうすればよいですか?

4

1 に答える 1

1

指定されたテスト コードは、実際にはサインアップ イベントをリッスンしていません。

signupCallback = jasmine.createSpy("Signup");

あなたが望むものではありません。

signupCallback = jasmine.createSpy();    
Backbone.pubSub.on('Signup', signupCallback);

あなたが望むものを手に入れるべきです。

この新しいコードでは、signupCallback がイベント コールバックとして割り当てられているため、イベントをトリガーするとスパイ コールバックが呼び出されます。

于 2014-01-08T17:32:16.433 に答える