我知道這應該是簡單的,我只是沒有做正確的事情,並沒有發現這個例子模仿,我猜我完全理解什麼應該去Ember.run()
簡單的灰燼組件測試與計算屬性
這裏是我的組件代碼:
import Ember from 'ember';
export default Ember.Component.extend({
isGreen: function() {
if (!status) { return ''; }
return status.toUpperCase() === 'G';
}.property('status')
});
我的組件模板:
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-green {{if isGreen 'active'}}">
<input checked="checked" name="status" value="G" type="radio"/> Green
</label>
<label class="btn btn-yellow {{if isYellow 'active'}}">
<input name="status" value="Y" type="radio"/> Yellow
</label>
<label class="btn btn-red {{if isRed 'active'}}">
<input name="status" value="R" type="radio"/> Red
</label>
</div>
而且在我的測試:
test('status sets active class on the correct button', function(assert) {
expect(3);
var component = this.subject();
//Green status
Ember.run(function() {
component.set('status', 'G');
})
equal(this.$().find('.btn-green.active').length, 1, 'When status is green, the green button has the active class');
我有三個這樣的測試,一個針對三種不同的狀態。如果我只有一個測試,我不需要在Ember.run()
中包裝component.set()
以便測試通過。但是,如果我有三個測試中,我得到這個錯誤:
You have turned on testing mode, which disabled the run-loop's autorun. You will need to wrap any code with asynchronous side-effects in a run
但如果我真的把我的每一個component.set()
電話的運行循環,然後我的測試失敗是由於equal
斷言預期1和得到0。我敢肯定這是由於我缺乏理解,但是set()
沒有運行,否則組件會在斷言中重新呈現,因此不知道status屬性已經設置。我一直在閱讀文檔和谷歌搜索一個小時,還沒有找到解決方案(更有益的是,一個解釋)。
不應該是'this.get('status')'?如您的代碼所示,最有可能會導致運行時錯誤,狀態是未定義的。 –