[英]Why does injecting 'ng' in unit tests change promise handling behaviour?
以下服務在包裝第三方諾言時使用$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
您是否正在使用角-? https://docs.angularjs.org/api/ngMock
我認為您需要手動注入ng的唯一原因是,如果沒有ng-app初始化您的應用程序,至少根據https://docs.angularjs.org/api/ng/function/angular 。模塊
如果您使用angular-mocks,它會為您解決這一問題https://github.com/angular/angular.js/blob/master/src/ngMock/angular-mocks.js#L1785
想不到為什么會出現此問題的任何其他原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.