awe*_*son 3 unit-testing angularjs angularjs-service
鉴于我有这样的服务.
angular.module('app')
.factory('Session', function Session($rootScope, $cookieStore) {
var user;
if (user = $cookieStore.get('user')) {
$rootScope.currentUser = user;
}
});
Run Code Online (Sandbox Code Playgroud)
和测试
'use strict';
describe('Service: Session', function () {
var Session,
_rootScope,
_cookieStore;
beforeEach(module('app'));
beforeEach(module(function($provide, $injector) {
_rootScope = $injector.get('$rootScope').$new();
_cookieStore = {
get: angular.noop
};
$provide.value('$rootScope', _rootScope);
$provide.value('$cookieStore', _cookieStore);
}));
beforeEach(inject(function(_Session_) {
Session = _Session_;
}));
it('transfers the cookie under user into the currentUser', function() {
spyOn(_cookieStore, 'get').andReturn('user');
inject(function(_Session_) {
Session = _Session_;
});
expect(_rootScope.currentUser).toEqual('user');
});
});
Run Code Online (Sandbox Code Playgroud)
我最终得到了
Error: [$injector:unpr] Unknown provider: $rootScope
http://errors.angularjs.org/1.2.6/$injector/unpr?p0=%24rootScope
Run Code Online (Sandbox Code Playgroud)
有人能向我解释我错过了什么概念吗?我发现单元测试服务非常困难.
诀窍是使用$ injector在特定时刻显式实例化服务.(感谢您的帮助@caitp)
'use strict';
describe('Service: Session', function () {
var _cookieStore;
beforeEach(module('rallyApp'));
beforeEach(module(function($provide) {
_cookieStore = {
get: angular.noop
};
$provide.value('$cookieStore', _cookieStore);
}));
it('transfers the cookie under user into the currentUser', function() {
inject(function($rootScope, $injector) {
spyOn(_cookieStore, 'get').andReturn('caitp');
$injector.get('Session');
expect($rootScope.currentUser).toBe('caitp');
});
});
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2300 次 |
最近记录: |