Я знаю, что это должно быть просто, я просто ничего не делаю правильно, и не нашел пример для подражания, и я не думаю, что я полностью понимаю, что следует делать внутри 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()
не работает, либо компонент получает повторное отображение в утверждении и, следовательно, не знает, что свойство состояния уже установлено. Я читал документы и поисковые запросы в течение часа, и еще не нашел решения (и более полезно, объяснение).
Не должно быть 'this.get ('status')'? Поскольку ваш код стоит, он, скорее всего, вызовет ошибку во время выполнения, что «статус» не определен. –