У меня есть компонент боковой панели, который полагается на службу боковой панели, которая вводится в нее через инициализатор.Компонент Ember, не обновляющийся в тесте интеграции при инжектируемой услуге
компонент, то есть вычисленное право собственности, который привязан к тем же собственностям на службе:
title: function() {
return this.get('sideBarService.title');
}.property('sideBarService.title'),
Это работает в самом приложении, но я не могу получить компонент для обновления в интеграционном тесте, когда обслуживание.
Вот мой не тест рабочей интеграции:
import Ember from 'ember';
import startApp from '../helpers/start-app';
import hbs from 'htmlbars-inline-precompile';
import { moduleForComponent, test } from 'ember-qunit';
var application, container, sideBarService;
moduleForComponent('side-bar', 'Integration | side-bar',{
integration: true,
beforeEach: function() {
application = startApp();
container = application.__container__;
sideBarService = container.lookup('service:side-bar');
},
afterEach: function() {
Ember.run(application, 'destroy');
}
});
test('it displays the correct title', function(assert) {
assert.expect(1);
Ember.run(function() {
sideBarService.set('title', 'Hello');
});
this.render(hbs`
{{side-bar}}
`);
var content = this.$('.side-bar-content .title').text().trim();
var serviceTitle = sideBarService.get('title');
// fails
assert.deepEqual(content, serviceTitle);
});
Интересно, если я отладки в тесте и захватить компонент с консолью, а затем захватить sideBarService от компонента, он осознает обновленное значение названия и даже название значения на самом компоненте, кажется, обновляются, но дом никогда не обновляется:
//debugged in browser console
var sb = container.lookup('component:side-bar')
undefined
sb.get('title')
"Hello"
sb.get('sideBarService.title')
"Hello"
this.$('.title').text().trim()
""
это вопрос цикла запуска? Если да, то что мне нужно сделать, чтобы настроить его?
Редактировать: Что касается комментария Торана. Правильно ли это выглядит?
var done = assert.async();
var content = this.$('.side-bar-content .title').text().trim();
var serviceTitle = sideBarService.get('title');
setTimeout(function() {
assert.deepEqual(content, serviceTitle);
done();
});
часто ж/асинхронный код, который я нашел, что интеграционные тесты требуют «переменного сделано = assert.async()» плюс SetTimeout от 1 (тогда, когда я делаю утверждение и огнь проделанные() я могу убедитесь, что цикл событий выполнил задание, как ожидалось). Попробуйте это и сообщите мне, если это сработает/или вам понадобятся какие-то руки на помощь. –
Я искренне ценю ответ, но не смотрю. Я добавляю фрагмент выше, чтобы показать, что я сделал на всякий случай, если я не назвал assert async правильно. – Andrew
@ToranBillups. Я бы определенно предложил вам разобраться в этом больше! Есть ли лучший способ следить за вами? – Andrew