2015-06-30 76 views
0

我知道這應該是簡單的,我只是沒有做正確的事情,並沒有發現這個例子模仿,我猜我完全理解什麼應該去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屬性已經設置。我一直在閱讀文檔和谷歌搜索一個小時,還沒有找到解決方案(更有益的是,一個解釋)。

+1

不應該是'this.get('status')'?如您的代碼所示,最有可能會導致運行時錯誤,狀態是未定義的。 –

回答

1

@torazaburo:捂臉出於某種原因時,這只是一個測試通過,我認爲這可能是一個假陽性是由於模板的東西。但當然你是對的。

我應該一直在使用this.get(status)。新手錯誤!