一次运行多个时,Ember集成测试失败

时间:2016-01-20 23:21:41

标签: ember.js mocha ember-cli

我遇到了为我的组件编写集成测试的奇怪问题。当我单独运行每一个时,它们会通过。当我运行多个时,第一个通过而另一个通过。我认为这与关闭行动有关,但我不知道。

这是我的组件代码

// components/game-nav-key.js
triggerKeyAction(code) {
  if (this.get('prevKeyCode').contains(code)) {
    this.sendAction('onPrevKey', true);
  } else if (this.get('nextKeyCode').contains(code)) {
    this.sendAction('onNextKey', true);
  } else if (this.get('openKeyCode').contains(code)) {
    this.sendAction('onOpenKey');
  }
},

didInsertElement() {
  var self = this;

  Ember.$('body').keydown(function(e) {
    self.triggerKeyAction(e.which);
  });

  Ember.$('body').keyup(function(e) {
  });
}

我的测试

// game-nav-key-test.js
it('tracks key commands and sends an action for K', function() {
  let spy = sinon.spy();
  this.set('gotoPrev', spy);
  this.render(hbs`
    {{game-nav-key onPrevKey=(action gotoPrev)}}
  `);

  triggerKeydown($('body'), 75);
  triggerKeyup($('body'), 75);

  sinon.assert.calledOnce(spy);
  sinon.assert.calledWith(spy, true);
});

it('tracks key commands and sends an action for J', function() {
  let spy = sinon.spy();
  this.set('gotoNext', spy);
  this.render(hbs`
    {{game-nav-key onNextKey=(action gotoNext)}}
  `);

  triggerKeydown($('body'), 74);
  triggerKeyup($('body'), 74);

  sinon.assert.calledOnce(spy);
  sinon.assert.calledWith(spy, true);
});

it('tracks key commands and sends an action for R', function() {
  let spy = sinon.spy();
  this.set('open', spy);
  this.render(hbs`
    {{game-nav-key onOpenKey=(action open)}}
  `);

  triggerKeydown($('body'), 82);
  triggerKeyup($('body'), 82);

  sinon.assert.calledOnce(spy);
});

我删除了所有之前的所有内容,所以它实际上只是那三个测试。就像我说的那样,每一个都单独传递,当它首先列出时,但是后两个在一起运行时失败。请注意,使用console.log语句我已经验证代码在各自测试中的每个this.sendAction调用的正上方直接命中

1 个答案:

答案 0 :(得分:1)

您似乎需要销毁在didInsertElement

中创建的侦听器
willDestroyElement() {
    Ember.$('body').off('keydown');
    Ember.$('body').off('keyup');
}