看起来promises
do not resolve in Angular/Jasmine tests unless you force a
$scope.$digest()
.这是愚蠢的IMO但很好,我有工作在适用(控制器)。
我现在的情况是我有一个服务,可以关心任何范围的应用程序,所有它从服务器返回一些数据,但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(); }); }); });
测试此功能的正确方法是什么?
编辑:解决方案参考。显然,你被迫注入和消化$ rootScope,即使服务没有使用它。
it('should get something',function($rootScope,done) { var promise = myService.getSomething(); promise.then(function(resp) { expect(resp).toBe('test'); }); $rootScope.$digest(); done(); });
您需要在测试中注入$ rootScope并触发$ digest。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。