Osc*_*car 6 unit-testing angularjs angularjs-directive
我如何对我的指令进行单元测试?
我拥有的是什么
angular.module('MyModule').
directive('range', function() {
return {
restrict: 'E',
replace: true,
scope: {
bindLow: '=',
bindHigh: '=',
min: '@',
max: '@'
},
template: '<div><select ng-options="n for n in [min, max] | range" ng-model="bindLow"></select><select ng-options="n for n in [min, max] | range" ng-model="bindHigh"></select></div>'
};
})
Run Code Online (Sandbox Code Playgroud)
在我的单元测试中,我想从一个非常简单的测试开始
describe('Range control', function () {
var elm, scope;
beforeEach(inject(function(_$compile_, _$rootScope) {
elm = angular.element('<range min="1" max="20" bind-low="low" bind-high="high"></range>');
var scope = _$rootScope_;
scope.low = 1;
scope.high = 20;
_$compile_(elm)(scope);
scope.$digest();
}));
it('should render two select elements', function() {
var selects = elm.find('select');
expect(selects.length).toBe(2);
});
});
Run Code Online (Sandbox Code Playgroud)
这不,虽然作为该指令被注册的应用模块上工作,我不想包含模块,这将使我的所有的config和run代码运行.这将破坏将指令作为一个单独的单元进行测试的目的.
我是否应该将所有指令放在一个单独的模块中并加载它?还是有其他聪明的方法来解决这个问题吗?
编辑:我发现自上次回答以来问题已经改变。
您需要将指令放在独立的模块中。
例如:
angular.module('MyModule.directives');
Run Code Online (Sandbox Code Playgroud)
要仅测试该模块,您可以在测试中显式加载该模块,如下所示:
beforeEach(module('MyModule.directives'));
Run Code Online (Sandbox Code Playgroud)
这将加载该模块及其所有依赖项。
请记住在应用程序的 MyModule 定义中将指令模块声明为依赖项:
angular.module('MyModule', ['MyModule.directives', ...]);
Run Code Online (Sandbox Code Playgroud)