javascript - 使用 Angular Promise 进行 Jasmine 测试无法使用 TypeScript 进行解析

标签 javascript angularjs typescript jasmine angular-promise

我有一个相当简单的测试,它违背了 Angular 的 promise ,我在 beforeEach 函数中解决了这个问题,但我的代码中的 then 从未触发,我看不到我错过了什么。这些是用 TypeScript 编写的,但这实际上对问题没有任何影响。

这是我的测试

describe('Refresh->', () => {

  var controller = new Directives.Reporting.ReportDirectiveController($scope, $q, $location);
  var called = false;
  var defer: any;

  beforeEach((done) => {
    controller.drillReport = (drillReport: Models.drillReport): ng.IPromise<Models.drillData> => {
      defer = $q.defer();
      called = true;
      defer.resolve({});
      return defer.promise;
    };
    spyOn(controller, 'processResults');
    controller.refresh();
    done();
  });

  it('Calls DrillReport', () => {
    expect(called).toBeTruthy();
  });

  it('Calls ProcessResults', () => {
    expect(controller.processResults).toHaveBeenCalled();
  });
});

Controller 中的 Refresh 方法如下所示:

refresh() {
  this.drillReport({ drillReport: drillReport })
    .then((results: Models.drillData) => {
      parent.processResults(results, parent.availableDrills, this.columns, this.gridOptions, undefined, undefined);
    });
}

最佳答案

您缺少的是您需要访问使用$scope$rootScope,以便您可以调用并强制摘要循环...

$scope.$digest();

需要这样做的原因是在摘要循环期间处理已解决和已拒绝的 promise 。因此,当您在模拟中解析 Promise 时,实际的 Promise 回调并未被调用。

关于javascript - 使用 Angular Promise 进行 Jasmine 测试无法使用 TypeScript 进行解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35507812/

相关文章:

angularjs - 在 angularjs 版本 1.3.0 中使用 ng-controller 时出现错误

javascript - 不同选项卡中 Controller 之间的 Angularjs 通信

javascript - AngularJS:禁用提交和服务器响应之间的所有表单控件

javascript - 根据 HTML 文件名授予 Web 服务器写入权限

JavaScript 随机加载消息生成器问题

angular - 如何从 Angular2 FormControl 对象获取输入字段的名称?

javascript - 如何检查响应是否属于特定接口(interface)类型?

typescript - 打开解决方案时 Visual Studio 2015 Update 3 出错( typescript )

javascript - 在 AngularJS 的 index.html 上加载动态 CSS

javascript - Highcharts 中的条形颜色设置不正确?