如何使用Jasmine测试自定义事件(使用Backbone)

时间:2013-09-23 19:44:50

标签: javascript backbone.js jasmine

我有一个绑定按钮的功能。代码部分属于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自定义事件是否被调用的测试失败了。如何正确测试此事件的监听?

1 个答案:

答案 0 :(得分:0)

您给定的测试代码实际上并没有收听注册事件。

signupCallback = jasmine.createSpy("Signup");

不是你想要的。

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

应该得到你想要的东西。

在这个新代码中,signupCallback被指定为事件回调,因此触发事件应该调用间谍回调。