gpt4 book ai didi

unit-testing - Jasmine 中没有解决的 Angular promise

转载 作者:行者123 更新时间:2023-12-04 04:48:46 27 4
gpt4 key购买 nike

我有以下 Jasmine 测试:

it('should resolve promise', inject(function ($q, $rootScope) {

function getPromise(){
var deferred = $q.defer();
setTimeout(function(){
deferred.resolve(true);
}, 1000);
return deferred.promise;
}

var p = getPromise();
var cb = jasmine.createSpy();

runs(function(){
expect(cb).not.toHaveBeenCalled();

p.then(cb);

$rootScope.$apply();
});

waitsFor(function(){
return cb.callCount == 1;
});

runs(function(){
expect(cb).toHaveBeenCalled();

$rootScope.$apply();
});

}));

我认为 $rootScope.$apply 应该解决所有未完成的 promise ,但不知何故它在这个测试中没有发生。

我如何在这样的测试中触发 promise 解决?请帮忙!

最佳答案

我认为 $rootScope.$apply()在你的情况下被调用太快了。这应该有效:

function getPromise(){
var deferred = $q.defer();
setTimeout(function(){
deferred.resolve(true);
$rootScope.$apply();
}, 1000);
return deferred.promise;
}

更新

可以注入(inject) mock $timeout service并使用 $timeout.flush() 明确地解决其中的 promise .

it('should resolve promise', inject(function ($q, $timeout, $rootScope) {

function getPromise(){
var deferred = $q.defer();
$timeout(function(){
deferred.resolve(true);
}, 1000);
return deferred.promise;
}

// ...

$timeout.flush();

// ...

关于unit-testing - Jasmine 中没有解决的 Angular promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20311118/

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