2017-10-31 1 views
1

나는 테스트중인 Angular2 구성 요소에 대해 지연된 객체의 재사용을 시도하고 있습니다.반환 값에 대한 지연된 객체 반환 쟈스민

구성 요소 기능 :

public createAndExecuteIdentify(url) { 
     identifyTask = this._widgetFactory.createIdentifyTask(url); //returns object 
     return identifyTask.execute(this.identifyParams); //this returns a deferred 
} 

사양 : 이것은 위대한 작품을

let fakeTask: any; 

fakeTask = { 
     execute: jasmine.createSpy('execute'), 
     url: "[email protected]" 
}; 
fakeFactory.createIdentifyTask.and.returnValue(fakeIdentifyTask); 

describe("when executing identifyTask",() => { 
    it("should return the proper object",() => { 
     let taskReturn = component.createAndExecuteIdentify(fakeTask.url); 
     expect(taskReturn).toEqual(jasmine.objectContaining({ 
      promise: {} 
     })); 
    }); 
}); 

, fakeTask.execute가 연기 반환하지 않는다는 사실이 아닌. 어떻게 든 일할 수 있겠 연기 반환 할 fakeTask의 실행 스파이를 설정하는 경우

b.Deferred {promise: {…}, isResolved: ƒ, isRejected: ƒ, isFulfilled: ƒ, 
isCanceled: ƒ, …} 
addCallbacks: ƒ (a,b) 
callback: ƒ (a) 
cancel: ƒ() 
errback: ƒ (a) 
isCanceled: ƒ() 
isFulfilled: ƒ() 
isRejected: ƒ() 
isResolved: ƒ() 
progress: ƒ (a) 
promise: {isResolved: ƒ, isRejected: ƒ, isFulfilled: ƒ, isCanceled: ƒ, then: ƒ, …} 
reject: ƒ (a) 
resolve:ƒ (a) then: ƒ (b,d,h) 
_pendingDfd: b.Deferred {promise: {…}, isResolved: ƒ, isRejected: ƒ, isFulfilled: ƒ, isCanceled: ƒ, …} 
__proto__: Object 

그래서 내가 궁금 :

fakeTask.execute의 원하는 결과()이 같은 객체를 반환? (상술 한 바와 같이 실제 건 지연된 도장 타입을 리턴 http://dojotoolkit.org/reference-guide/1.10/dojo/Deferred.html.)

+0

'fakeTask.execute.and.returnValue (...)'? 귀하의 예제가 일관성없는 이름을 사용하는 것으로 보이므로 [mcve]가 아닙니다. – jonrsharpe

+0

예, 좀 더 복잡한 구성 요소의 일부이며 조금 복잡해집니다. Angular의 $ q 라이브러리는 재미 있었지만 Angular2에 해당하는 라이브러리가 있는지 확실하지 않았습니다. –

+0

'fakeTask.execute.and.returnValue (...)'가 거의 작동합니다. 필요한 개체를 제공하지만 개체 유형에 영향을 미칩니다. 그래서 오류가 발생합니다 : ** TypeError : 스트림이 예상되는 곳에 잘못된 개체를 제공했습니다. Observable, Promise, Array 또는 Iterable을 제공 할 수 있습니다. ** 제 실제 사례에서, 객체 유형은 b.Deferred로 나열됩니다. –

답변

0

이 그것을 해결 :

import Deferred from "dojo/Deferred"; 

let deferred = new Deferred(); 
fakeTask.execute.and.returnValue(deferred); 

이것은 지연의 종류가 인식 개체 유형을 만든다.

+0

올바른 방향으로 나를 가리키는 주셔서 감사합니다 @jonrsharpe :) –

관련 문제