2015-06-30 5 views
0

Я знаю, что это должно быть просто, я просто ничего не делаю правильно, и не нашел пример для подражания, и я не думаю, что я полностью понимаю, что следует делать внутри Ember.run()Простой тест компонента Ember с вычисленными свойствами

Вот мой код компонента:

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'); 

У меня есть три из этих тестов, по одному для каждого из трех разных статусов. Если у меня есть только один тест, мне не нужно обернуть component.set() в Ember.run(), чтобы пройти тест. Но если у меня есть все три теста, я получаю эту ошибку:

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() не работает, либо компонент получает повторное отображение в утверждении и, следовательно, не знает, что свойство состояния уже установлено. Я читал документы и поисковые запросы в течение часа, и еще не нашел решения (и более полезно, объяснение).

+1

Не должно быть 'this.get ('status')'? Поскольку ваш код стоит, он, скорее всего, вызовет ошибку во время выполнения, что «статус» не определен. –

ответ

1

@torazaburo: Facepalm По какой-то причине прошло испытание, когда он был только один, который я думаю, может быть ложноположительный из-за чего-то в шаблоне. Но, конечно, вы правы.

Я должен был использовать this.get(status). Ошибка новичка!