我一直在网上寻找,但似乎没有人真正将实际的依赖注入到使用Jasmine和Karma的Angularjs的单元测试中。
我认为测试过程肯定存在分离,但我也想知道它如何与当前使用的依赖项很好地集成...所以,以防依赖关系不能很好地与我的组件一起工作,我会意识到的!
所以,我想知道如何注入实际的依赖项?到目前为止,我发现在线文章都是关于用假的嘲笑它...但我想使用实际的文章。现在,当我输入karma start
时,我收到错误Error: [$injector:unpr] Unknown provider: _Provider <- _ <-MyService
我在forEach块注入服务,就像这样
beforeEach(angular.mock.inject(function(_MyService_) {
我想知道是不是因为我没有使用虚假服务?
describe('MyCtrl', function() {
//Data Exposure Prep
var $controller;
var $rootScope;
var $scope;
var controller;
var MyService;
dd1 = {
itinerary: globalMockData.d1,//I stored globalMockData somewhere else
};
beforeEach(angular.mock.module('myapp'));
beforeEach(angular.mock.inject(function(_$rootScope_, _$controller_, _$httpBackend_) {
$rootScope = _$rootScope_;
$controller = _$controller_;
$httpBackend = _$httpBackend_;
$scope = $rootScope.$new();
controller = $controller('MyCtrl', { $scope: $scope }, dd1);
}));
//BASIC INFO
describe('should receive sth', function() {
it('finds sth', function() {
expect(controller.answer).toBeDefined();
});
});
});
答案 0 :(得分:-1)
这实际上取决于您的Controlller实施。 如果你正在使用示波器,你可能想要在控制器的范围内测试,而不是在控制器本身上测试。
使用$ scope测试控制器
function MyController($scope, MyService) {
$scope.greetUpperCase = function(name) {
return MyService.greet(name).toUpperCase();
}
}
基本上,当你使用$ scope时,你并不真正关心控制器本身,因为它正在做它的范围内的所有事情。
所以,我们需要:
注入$ rootScope 创建一个新的范围 将它注入新的控制器 测试$ scope
it('test greetUpperCase()', function() {
var myScope = $rootScope.$new();
$controller('MyController', {
$scope: myScope
});
expect(myScope .greetUpperCase('bob')).toBe('HELLO BOB');
});