0
我想單元測試一個具有默認範圍(範圍:false)的指令,但我無法注入其控制器的依賴。默認範圍的指令單元測試
var MyApp = angular.module('MyApp',['MyDirectives','MyServices','MyControllers']);
這裏是指令
var MyDirectives = angular.module('MyDirectives', []);
MyDirectives.directive('myAddress', [ '$timeout', function ($timeout) {
return {
restrict: 'A',
require: 'ngModel',
link: function (scope, elm, attr, ctrl) {
if (!ctrl) {
return;
}
elm.on('focus', function() {
scope.AppData.ShowSeparateAddress = false;
});
}
};
}]);
這裏是我的控制器
var MyControllers = angular.module(' MyControllers', []);
MyControllers.controller('Step1', [
'$rootScope', '$scope', 'AppData', function ($rootScope, $scope, AppData) {
$scope.AppData = AppData.get();
}
這裏是我的應用程序服務
var MyServices = angular.module(' MyServices', []);
MyServices.factory('AppData', [function() {
var data;
return {
get: function() {
data = data || {};
return data;
}
};
}]);
下面是地址指令
單元測試beforeEach(module(MyApp));
var element, compiledElement, directiveElement;
var scope, compile, ele,AppData,controller;
beforeEach(inject(function(_$rootScope_, _$compile_){
scope = _$rootScope_.$new();
compile = _$compile_;
}));
beforeEach(inject(function(_$controller_, _AppData_){
AppData = _AppData_;
controller = _$controller_('Step1',{scope:scope, AppData:AppData});
}));
function getCompiledElement(ele) {
element = angular.element(ele);
compiledElement = compile(element)(scope);
scope.$digest();
return compiledElement;
}
it('should set show separate addrress as false when focussed',function(){
ele = '<input type="text" data-my-address />';
directiveElement = getCompiledElement(ele);
console.log(directiveElement);
expect(scope.AppData.ShowSeparateAddress).toBe(false);
});
}); 我得到這個以下錯誤
Error: [$injector:unpr] Unknown provider: AppDataProvider <- AppData
我也trieed嘲諷的服務,通過提供,但沒有奏效 任何幫助或想法?
當瀏覽器在本地運行時,這實際上是否工作? – mindparse
我不確定,但是:您的控制器簽名中有三個參數,並且您只傳遞兩個參數。你應該添加$ rootScope – Zakaria
@mindparse yes上面的指令工作正常。此指令使用默認範圍,並且我在注入其父控制器'Step1'的指令內使用AppData服務。所以我無法在指令中模擬此AppData服務。 – deeps