{{deferred-content}}
コンポーネントは、モデルオブジェクトのasset
リレーションにフックされたコンポーネントのテンプレート内にあります。Ember統合テスト+リレーションシップ+ ember-deferred-contentアドオンを使用したモックモデル
{{#unless showUploadForm}}
{{#deferred-content contentBlock.asset as |d|}}
{{#d.fulfilled as |asset|}}
{{#if asset.asset.isProcessing}}
{{! Show processing message here }}
{{/if}}
{{/d.fulfilled}}
{{/deferred-content}}
{{/unless}
showUploadForm
計算プロパティが重要である:ここで私は何をしようとしているの削ぎ落としたバージョンがあり、開発モードと本番で自分のアプリケーションからの見事
showUploadForm: computed('contentBlock.asset', 'isReplacing', function() {
console.log(this.get('contentBlock.asset.id'));
return this.get('isReplacing') || isBlank(this.get('contentBlock.asset.id'));
})
このすべての作品モードなど、すべてAPIにフックされています。私は統合テストを記述しようとすると、
その後、我々はトラブルタウンを入力します。
test('it displays processing message when asset is loaded in with processing status', function(assert) {
let deferred = RSVP.defer();
this.set('contentBlock', Ember.Object.create({
asset: deferred.promise
}));
this.render(hbs`{{asset-editor contentBlock=contentBlock}}`);
// This is likely the big fat problem. I don't know what to put here.
deferred.resolve(Ember.Object.create({
id: 'the-id',
asset: {
isProcessing: true
}
}));
let done = assert.async();
return wait().then(() => {
// Stuff I'm asserting is here. It fails because the
// `showUploadForm` computed property is returning `true`.
done();
});
});
興味深い部分は、私は上記の共有計算されたプロパティです。開発/生産では、私はid
を取得します。テストでは、私はundefined
を取得します。
この問題は、Ember Dataが約束を処理していることと、受け取ったデータを解決した後に「アンパック」するオブジェクトが原因であることが確かです。問題は、私の統合テストでこれをどうやって模倣するのか分かりません。
deferred.resolve
を呼び出して、アプリケーションがモデルの関係として値を扱うように設定することができるものは特にありますか?
ボーナス笑いについて、Iは、試験にエンバーミラージュを引っ掛けcontentBlock
(関連するデータサイドロードし、後でないとの両方)を取得するstore
サービスを照会し、試験にcontentBlock
ようにそれを設定しますコンテキスト。私は同様の結果を得た。
解決策は受け入れテストに移行することですか?私がコンポーネントテスト以上に好きなのはただ1つだけです。それは受け入れテストです。 –
オブジェクトが 'contentBlock'オブジェクトに変更を通知していたのであれば修正してもらえますか?私の推測では、約束がコンテンツを変更しているとは見えません。 –