私はジャスミンで遅延オブジェクトの返り値を偽造しようとしています。これは、私がテストしている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。)
'fakeTask.execute.and.returnValue(...)'?あなたの例では一貫性のない名前が使われているようですので、[mcve]ではありません。 – jonrsharpe
はい、それはより複雑なコンポーネントの一部ですが、ややトリッキーなものです。 Angularの$ qライブラリは興味深いようでしたが、Angular2に相当するものがあるかどうかはわかりません。 –
'fakeTask.execute.and.returnValue(...)'はほとんど動作します。それは私に必要なオブジェクトを与えますが、オブジェクトタイプに影響します。だから私はエラーを受け取ります: ** TypeError:ストリームが予想された場所で無効なオブジェクトを指定しました。 Observable、Promise、Array、Iterableを提供することができます** 私の実際の例では、オブジェクトタイプはb.Deferredとしてリストされています。 –