2016-01-20 111 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'); 
} 
相關問題