2017-10-31 10 views
1

私はジャスミンで遅延オブジェクトの返り値を偽造しようとしています。これは、私がテストしているAngular2コンポーネントです。戻り値の遅延オブジェクトを返すJasmine

コンポーネント機能:

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.execute(の望ましい結果は)このようにオブジェクトを返します:

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の延期を返すためにスパイを実行して設定するとうまくいくのであれば、私は疑問に思って? (上記のように実物は繰延道場のタイプを返し 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 :) –

関連する問題