【问题标题】:How to test if a backbone view listens to specific event correctly如何测试主干视图是否正确监听特定事件
【发布时间】:2015-06-09 11:43:43
【问题描述】:

我正在尝试测试 Backbone.js 视图是否正确侦听路由器触发的特定事件。我正在测试的视图上的初始化方法如下所示:

initialize: function(options) {
  this.router = options.router; // pass router obj through args
  this.listenTo(this.router, 'login_manager:show', this.buildLoginPage); // not shown on this snippet, but defined later
}

当路由在我的路由器上匹配时,我会执行以下操作:

showLogin: function() {
  this.trigger('login_manager:show');
}

此代码在浏览器上按预期工作,但我为它做的测试没有通过。这是我正在尝试做的测试:

beforeEach(function() {
  this.router = new Backbone.Router();
  this.loginManager = new LoginManager({
    router: this.router
  });
});

afterEach(function() {
  this.loginManager = null;
  this.router = null;
});

it('listens to correct event', sinon.test(function() {
  var spy = sinon.spy(this.loginManager, 'buildLoginPage');
  this.loginManager.router.trigger('login_manager:show');
  expect(spy.called).to.be.true;
}));

我没能通过这个测试,所以我想知道是否有人可以帮助我?

谢谢,

迭戈。

【问题讨论】:

  • listenTo() 在删除视图时停止工作,请检查是否将其删除,并将listenTo 放在render() 中而不是initialize(),也可以使用this.router.on() 代替确保它一直在工作。
  • 我不会在任何地方删除视图。我不想测试路由器是否触发事件,而是要测试视图是否监听它。

标签: javascript backbone.js sinon chai


【解决方案1】:

也许这会有所帮助

it('listens to correct event', () => {
  var stub = sinon.stub();
  Backbone.Events.listenTo(this.loginManager.router, 'login_manager:show', stub);
  this.loginManager.router.trigger('login_manager:show');
  stub.called.should.be.true;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2019-12-31
    • 2013-10-09
    相关资源
    最近更新 更多