2016-01-20 101 views
0

我碰到一个奇怪的问题,写我的组件集成测试。当我单独运行每个人时,他们都会通过。当我运行多个,第一个通过,其他人失败。我认为这与关闭行动有关,但我不知道。Ember集成测试失败时,一次运行多个

这里是我的组件代码

// 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); 
}); 

我删除了所有beforeEach的,所以它真的只是这三个测试。就像我说过的,每一个都是单独传递的,当它被列在第一位时,但是第二个在一起运行时失败。请注意,使用console.log声明我已经验证码点击上方的每个在各自的测试this.sendAction电话

+0

貌似创建的行每次组件装入时都重新绑定侦听器,并且永远不会在卸载时解除绑定。 – Interrobang

+0

是的,它做到了!谢谢!想回答,所以我可以标记为正确的? –

回答

1

看来你需要摧毁你的听众在didInsertElement


willDestroyElement() { 
    Ember.$('body').off('keydown'); 
    Ember.$('body').off('keyup'); 
} 
相关问题