gpt4 book ai didi

javascript - 使用 Angular Promise 的 Jasmine 测试无法使用 TypeScript 解决

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:01 26 4
gpt4 key购买 nike

我有一个相对于 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com