Unit testing 指令内的单元测试角度指令
我很难在angularjs指令上运行karma单元测试。以下是我的设置:Unit testing 指令内的单元测试角度指令,unit-testing,angularjs,karma-runner,Unit Testing,Angularjs,Karma Runner,我很难在angularjs指令上运行karma单元测试。以下是我的设置: var scope, ele; var template = '<div data-my-directive data="data" config="config"></div>'; beforeEach(function () { // Load directive's module module('dashboard'); mod
var scope, ele;
var template = '<div data-my-directive data="data" config="config"></div>';
beforeEach(function () {
// Load directive's module
module('dashboard');
module('templates-dev');
// Load mock services/data (overriding real implementation)
module(function($provide) {
$provide.value("MockWidgetData", new MockWidgetData());
});
// Construct services/data to be available
// inside each testing block.
inject(function($rootScope, $compile, MockWidgetData) {
// Create a fresh scope
scope = $rootScope.$new();
ele = angular.element(template);
// Fill that scope with mock data
scope.config = MockWidgetData.config;
scope.data = MockWidgetData.data;
// Compile the element and attach our scope
$compile(ele)(scope);
// Digest the scope to trigger a scope update
// and attach our directive's link function
scope.$digest();
});
});
以下是我的指令示例:
angular.module('dashboard').directive('myDirective', function() {
return {
restrict: 'A',
templateUrl: 'my-dir-template.html',
scope: { //
data: '=',
config: '='
},
replace: true,
link: function(scope, element, attrs) {
scope.someFunc() = { ... },
scope.someFunc1() = { ... },
});
问题:
- 在$compile(ele)(scope)之后,元素的.log()将显示整个 DOM,包括各种angular.js指令和其他奇怪的 信息。我希望看到我的指令的测试模板 与上面的templateUrl混合在一起。
- 作用域的.log()显示完整的数据和配置对象及其预期值。它还显示了我的指令的link函数中可用的函数,正如人们所期望的那样。然而,在我的测试块中,似乎范围对象是空的。。。我无法访问指令的任何函数(它们都返回未定义的)。
- 我可以通过
捕获指令html中的一些元素,但没有正常的函数可以工作(.click(),等等)。ele.find(“#my btn”).eq(0)
经过仔细检查。。。看起来我可以在
$compile(ele)(scope)
之前scope.$digest()
,这将正确地将“data”和“config”对象传播到子作用域。但是,我的作用域将失去对指令链接中定义的函数的访问权限 您应该在$compile(ele)(scope)
之后调用scope.$digest()
。摘要是进行指令编译所必需的。您的指令有一个独立的作用域,这就是为什么您不能访问它的函数。要获得它们,您应该尝试以下方法:
var-elScope=element.isolateScope()代码>
这是你的elScope.someFunc()代码>
检查以下单元测试指令示例:
您能否提供一些Plunker脚本,说明您所描述的问题?
angular.module('dashboard').directive('myDirective', function() {
return {
restrict: 'A',
templateUrl: 'my-dir-template.html',
scope: { //
data: '=',
config: '='
},
replace: true,
link: function(scope, element, attrs) {
scope.someFunc() = { ... },
scope.someFunc1() = { ... },
});