我對Ember有點新,並試圖測試尋呼機組件。簡化的組件看起來是這樣的:Ember組件測試 - 如何在未調用外部動作時單元測試組件的動作?
export default Ember.Component.extend({
index: 0,
actions: {
next() {
this.incrementProperty('index');
}
}
});
我想測試下一個()動作確實增加索引屬性預期。我寫了這樣一個單元測試:
test('next should increment the index by 1', function (assert) {
const component = this.subject();
assert.equal(component.get('index'), 0, 'Index should be 0');
component.get('actions').next();
assert.equal(component.get('index'), 1, 'index should be 1');
});
但它失敗,錯誤「this.incrementProperty不是函數」。調試時,當在next()函數中時,測試中的「this」不是組件的上下文 - 它是next()作爲其唯一屬性的對象。
我不知道這是否是因爲我是如何調用在測試中nextPlace行動。我知道我可以寫一個集成測試的點擊次數將觸發這一行動,並比較了UI,以確保它改變了按鈕,但似乎很令人費解,當所有我想要測試的是函數本身與預期相符。如果它是一個傳遞給此組件的動作(閉包動作),我知道我可以在集成測試中設置一個虛擬函數,將其傳遞給組件,並查看它是如何響應的。但是這個動作並沒有把一個動作傳遞給它。
我意識到我的測試是非常基本的功能,而這部分是要了解如何測試在組件上的動作不調用外部(到組件)的行動。