Javascript 带角度承诺的Jasmine测试不使用TypeScript解析
我有一个相当简单的测试,它针对一个角度承诺工作,我在beforeach函数中解决了这个问题,但是我的代码中的then永远不会触发,我看不到我缺少了什么。这些都是用TypeScript编写的,但这与问题没有任何关系 这是我的测验Javascript 带角度承诺的Jasmine测试不使用TypeScript解析,javascript,angularjs,typescript,jasmine,angular-promise,Javascript,Angularjs,Typescript,Jasmine,Angular Promise,我有一个相当简单的测试,它针对一个角度承诺工作,我在beforeach函数中解决了这个问题,但是我的代码中的then永远不会触发,我看不到我缺少了什么。这些都是用TypeScript编写的,但这与问题没有任何关系 这是我的测验 describe('Refresh->', () => { var controller = new Directives.Reporting.ReportDirectiveController($scope, $q, $location); var
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();
});
});
您缺少的是,您需要访问才能使用
$scope
或$rootScope
,以便可以调用并强制执行摘要循环
$scope.$digest();
需要这样做的原因是在摘要循环中处理已解决和已拒绝的承诺。因此,当您在模拟中解析承诺时,不会调用实际的承诺回调。按照@Brocco所说的,您的代码在处理承诺之前调用done() 您所需要的是一种让测试代码知道已调用
parent.processResults()
的方法
我建议您让refresh返回一个承诺,该承诺将在
parent.processResults()
之后立即解决,并添加controller.refresh()。最后(()=>{done();})代码>在您的测试代码中。谢谢。我知道,但已经忘记了。
$scope.$digest();