代码之家  ›  专栏  ›  技术社区  ›  Jeremy Swagger

返回值Jasmine的延迟对象

  •  1
  • Jeremy Swagger  · 技术社区  · 7 年前

    我试图在jasmine中模拟延迟对象的返回,用于我正在测试的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: "bob@bob.com"
     };
     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
    

    所以我想知道,如果以某种方式设置法克塔斯克的执行间谍返回延期会不会奏效?(如上图所示,real thing返回一个延迟的Dojo类型。 http://dojotoolkit.org/reference-guide/1.10/dojo/Deferred.html )

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jeremy Swagger    7 年前

    这就解决了这个问题:

     import Deferred from "dojo/Deferred";
    
     let deferred = new Deferred();
     fakeTask.execute.and.returnValue(deferred);
    

    这使得对象类型可以识别为延迟类型。