Jasmine Testing with Angular Promise 无法使用 TypeScript 解析
Jasmine Testing with Angular Promise not resolving with TypeScript
我有一个相当简单的测试,它针对 Angular 承诺起作用,我在 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();
});
});
控制器中的 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();
需要这样做的原因是,在摘要循环期间处理已解决和拒绝的承诺。因此,当您在模拟中解析承诺时,不会调用实际的承诺回调。
按照@Brocco所说的,你的代码在处理承诺之前调用done()。
你需要的是一种让你的测试代码知道该parent.processResults()
已被调用的方法。
我建议你让刷新返回一个承诺,该承诺将在parent.processResults()
后解决,并在测试代码中添加controller.refresh().finally(() => { done(); });
。
相关文章:
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 使用JQuery解析JSON嵌套数组
- 可以简化嵌套的延迟Q Promises解析吗
- 我的模板未被解析
- Foreach无法在Typescript中工作
- 如何在Javascript中解析AJAX数组的特定部分
- 扩展SVGTextElement时出现Typescript Uncaught TypeError
- 为什么无法在TypeScript中导出类实例
- 主干集合重置和解析
- 解析javascript表单验证器
- 如何将TypeScript对象转换为普通对象
- 可以't使用Angular解析/检索JSON
- Jasmine Testing with Angular Promise 无法使用 TypeScript 解析
- 在 Angular 应用程序中将 JSON 解析为 Typescript 类
- 编译输出中的TypeScript依赖项未按正确顺序解析
- 如何在node.js中使用ecma6(typescript)解析Map到json
- 我可以用typescript.js做一些语言解析吗
- 有没有办法在typescript文件中解析c# ?
- TypeScript 1.8在AMD风格模块中的相对模块名解析与RequireJS 2.1
- 稍后在TypeScript中解析或拒绝Promise