イニシャライザを介して注入されるサイドバー サービスに依存するサイドバー コンポーネントがあります。
コンポーネントには、サービスの同じプロパティに関連付けられている計算されたプロパティ title があります。
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 を取得すると、更新されたタイトル値が認識され、コンポーネント自体の値タイトルも更新されているように見えますが、dom は決して更新されません。更新されます:
//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();
});