gpt4 book ai didi

angularjs - 单元测试,当 $http 没有被调用时等待 promise

转载 作者:行者123 更新时间:2023-12-02 04:31:47 25 4
gpt4 key购买 nike

我有一个单元测试,其中服务返回一个 promise 。有时该服务可能会发出 $http 请求,有时不会(它实现了某种缓存)。无论哪种情况,它都会解决 promise ,但只有在 $httpBackend.flush() 中它才真正开始进行回调。我怎样才能使已解析的 promise 像flush()那样实际调用.then()中的函数。

这个效果很好

resolved = jasmine.createSpy();
rejected = jasmine.createSpy();
employeeEventService.loadSchedules()
.then(resolved, rejected);

$httpBackend.flush(); // This causes the promise to resolve/reject

expect(resolved).toHaveBeenCalled();
expect(rejected).not.toHaveBeenCalled();

这个不起作用,因为我无法调用flush()(因为该服务从未调用过$http)

resolved = jasmine.createSpy();
rejected = jasmine.createSpy();
employeeEventService.loadSchedules()
.then(resolved, rejected);

//$httpBackend.flush(); // Can't call this because this call is "cached"

expect(resolved).toHaveBeenCalled();
expect(rejected).not.toHaveBeenCalled();

服务代码:

if(loaded.startOn <= params.startOn && loaded.endOn >= params.endOn
&& new Date() - lastFetch < 60000) {
deferred.resolve(loaded.schedules);
} else {
service.loading +=1;
config = {params: params, timeout:30*1000};
$http.get('/api/employee-schedules/', config)
.then(function(response) {
...
process the json response
...
deferred.resolve(loaded.schedules);
}, function(reason, status) {
$log.error("Failed to get schedules", reason, status);
deferred.reject(reason, status);
})
.finally(function() {
service.loading -=1;
});
}
return deferred.promise;

最佳答案

所有的 promise ,无论它们采用什么模式,都会在您调用 $scope.$digest(); 时得到解析

关于angularjs - 单元测试,当 $http 没有被调用时等待 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22888960/

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