以下服务使用$q.when
来包装第三方承诺:
// service.js
angular.module('test', [])
.service('pouchdb', function($q, $window) {
var db = new $window.PouchDB('test');
this.info = function() {
return $q.when(db.info.apply(db, arguments));
};
});
相应的单元测试:
describe('Failing Q when tests', function() {
beforeEach(module('test'));
var $rootScope, pouchdb;
beforeEach(inject(function(_$rootScope_, pouchdb) {
$rootScope = _$rootScope_;
pouchdb = pouchdb;
}));
it('should resolve a promise', function(done) {
// FIXME: never resolves
pouchdb.info()
.then(function(info) {
expect(info).toBeDefined();
})
.finally(done);
$rootScope.$apply();
});
});
pouchdb.info
永远无法解决,Jasmine超时。但是,如果我手动注入ng
,则规范按预期工作:
describe('Working Q when tests', function() {
var pouchdb;
beforeEach(function() {
var $injector = angular.injector(['ng', 'test']);
var pouchDB = $injector.get('pouchdb');
pouchdb = pouchDB('db');
});
it('should resolve a promise', function(done) {
pouchdb.info()
.then(function(info) {
expect(info).toBeDefined();
})
.finally(done);
});
});
任何人都可以解释原因;
ng
)$rootScope.$apply
答案 0 :(得分:0)
我认为你需要注射的唯一原因是'如果没有ng-app初始化您的应用,请手动操作,至少根据https://docs.angularjs.org/api/ng/function/angular.module
如果您使用角度模拟,它会为您https://github.com/angular/angular.js/blob/master/src/ngMock/angular-mocks.js#L1785
解决这个问题不能想出为什么会出现这个问题的任何其他原因。