在Jasmine衍生承诺得到错误解决

时间:2016-12-14 14:55:00

标签: jasmine promise karma-jasmine angular-promise

要点:

  1. 我监视我的休息服务的方法:

    spyOn(restService, 'get').and.callFake(function () {
          return deferred.promise;
    });  
    
  2. 我尝试测试的方法是myService.getFormData(),它返回一个链式承诺:

    function getFormData() {
          var getPromise = this.restService.get(endPoint, params, true);
          var processedDataPromise = then(successHandle, failHandler);
          return processedDataPromise;
    }  
    
  3. 回到Jasmine规范,我调用getFormData函数并进行断言:

    var processedDataPromise = myService.getFormData();
    processedDataPromise.then(function(data) {
       expect(data).not.toBeNull();  
    });
    deferred.resolve(testFormData);
    $rootScope.$digest();
    
  4. 问题:
    上面的衍生承诺(processedDataPromise)确实得到了解决。然而,'数据'传递给它是不确定的。是否与$ digest周期没有在Jasmine中工作有关?

    为什么Jasmine不会将任何数据传递给上面派生的promise。
    进一步说明:processedDataPromise是一个全新的承诺,而不是获得返回的承诺。

    对于processedData的承诺,正如我们所看到的那样,一旦其父getPromise被解析,它就会被successHandle(定义未显示)返回。

    在UI中,一切都像魅力一样。

1 个答案:

答案 0 :(得分:0)

很抱歉发布了这个问题。衍生承诺确实得到了我所指的解析数据。问题是我错误地访问了successHandle中的JSON数据。

结果'successHandle'返回null并且processedDataPromise返回未定义的响应。

愚蠢的错误,很难找到,但最好的部分是学习和理解JS Promises。