asset
관계에 연결하여 구성 요소 템플릿 내에 {{deferred-content}}
구성 요소를 사용하고 있습니다.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
을 호출하여 응용 프로그램이 해당 값을 모델의 관계로 취급하도록 설정할 수있는 항목이 있습니까?
보너스 : 웃음을 위해, 나는 시험에 엠버 미라지을 구부려 (모두 관련 데이터와 사이드로드 한 후 나중에되지 않음) contentBlock
를 얻기 위해 store
서비스를 조회하고, 테스트에와 contentBlock
설정 문맥. 비슷한 결과가 있습니다.
해결책을 수용 테스트로 옮길 수 있습니까? 구성 요소 테스트 이상을 좋아하는 것은 단 한 가지뿐입니다. 이는 수용 테스트입니다. –
만약 당신이 객체가 'contentBlock' 객체에 대한 변경을 알리면 고칠 수 있을지 궁금합니다. 내 생각에 약속이 내용을 변경한다는 것을 알지 못한다는 것입니다 (그리고 Ember Data는 비밀리에 처리 할 수 있습니다) –