gpt4 book ai didi

angularjs - 当没有 $scope 强制摘要时,如何解决 AngularJS、Jasmine 2.0 中的 promise ?

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

看来是有 promise 的do not resolve in Angular/Jasmine tests unless you force a $scope.$digest() 。在我看来,这很愚蠢,但没关系,我在适用的情况下可以使用它( Controller )。

我现在所处的情况是我有一个服务,它不太关心应用程序中的任何范围,它所做的只是从服务器返回一些数据,但 promise 似乎没有得到解决。

app.service('myService', function($q) {
return {
getSomething: function() {
var deferred = $q.defer();
deferred.resolve('test');
return deferred.promise;
}
}
});
<小时/>
describe('Method: getSomething', function() {
// In this case the expect()s are never executed
it('should get something', function(done) {
var promise = myService.getSomething();

promise.then(function(resp) {
expect(resp).toBe('test');
expect(1).toEqual(2);
});

done();
});

// This throws an error because done() is never called.
// Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
it('should get something', function(done) {
var promise = myService.getSomething();

promise.then(function(resp) {
expect(resp).toBe('test');
expect(1).toEqual(2);
done();
});
});
});

测试此功能的正确方法是什么?

编辑:引用解决方案。显然,即使服务没有使用它,您也被迫注入(inject)并消化 $rootScope。

  it('should get something', function($rootScope, done) {
var promise = myService.getSomething();

promise.then(function(resp) {
expect(resp).toBe('test');
});

$rootScope.$digest();
done();
});

最佳答案

您需要在测试中注入(inject) $rootScope 并在其上触发 $digest

关于angularjs - 当没有 $scope 强制摘要时,如何解决 AngularJS、Jasmine 2.0 中的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021031/

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