2017-03-19 5 views
0

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 설정 문맥. 비슷한 결과가 있습니다.

+0

해결책을 수용 테스트로 옮길 수 있습니까? 구성 요소 테스트 이상을 좋아하는 것은 단 한 가지뿐입니다. 이는 수용 테스트입니다. –

+0

만약 당신이 객체가 'contentBlock' 객체에 대한 변경을 알리면 고칠 수 있을지 궁금합니다. 내 생각에 약속이 내용을 변경한다는 것을 알지 못한다는 것입니다 (그리고 Ember Data는 비밀리에 처리 할 수 ​​있습니다) –

답변

0

궁극적으로 통합 테스트 대신 수락 테스트를 통해이 작업을 수행했습니다. 이 상황에서 기능을 많이 테스트 할 수 없으므로 구성 요소 테스트가 불완전 해 보였으므로이 사실은 저와 잘 맞지 않습니다.

즉,이 문제는 구성 요소를 더 작은 구성 요소로 분해하여 일부 특수 논리를보다 쉽게 ​​분리하고 테스트 할 수 있다는 점에서도 어려움을 겪고 있습니다. 그런 다음 데이터가로드되는 방식 (직접 관계 대 비동기 적으로 관계를 통해로드되는 방식 등)에 대해 걱정하지 않고 개별 구성 요소의 기능을 테스트 할 수 있습니다.

수용 테스트를 통해 이러한 모든 작은 구성 요소의 전반적인 통합을 테스트 할 수 있으므로, 모든 구성 요소를 자세히 분석 한 후 이벤트를 둘러 보는 것이 좋을 것입니다.