gpt4 book ai didi

angularjs - 使用 Jasmine 2 和 karma 测试 Angular $q

转载 作者:行者123 更新时间:2023-12-01 06:29:57 26 4
gpt4 key购买 nike

试图测试一个基于 promise 的服务,它会做这样的事情:

load : function(){
var deferred = $q.defer();

//Do misc async stuff
deferred.resolve();

return deferred.promise;
}

当尝试在 Karma + Jasmine 2.0 中测试这个时,我尝试使用它的 done() 回调,但它总是超时并且永远不会解决 promise 。
beforeEach(inject(function ($injector) {
service = $injector.get('myService');
$window = $injector.get("$window");
$rootScope = $injector.get('$rootScope');
}));

describe('Call load', function () {
it('resolves its promise', function (done) {
service.load().then(function(){
expect(something).not.toBe(undefined);
done();
});
});
});

从 Jasmines docs 这就是我虽然你应该使用 done() 和异步代码的方式,但似乎问题是 promise 永远不会解决

最佳答案

正如评论中提到的@TimCastelijns,您需要调用$scope.$apply解决单元测试中的 promise :

load: function(){
var deferred = $q.defer();

setTimeout(function () {
//Do misc async stuff
deferred.resolve();
$rootScope.$apply();
});

return deferred.promise;
}

关于angularjs - 使用 Jasmine 2 和 karma 测试 Angular $q,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342612/

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