Javascript Karma/Jasmine测试自定义指令控制器
我正在用Karma+Jasmine测试AngularJS自定义指令。我找到了一种方法,通过查阅网上的许多参考资料来做到这一点。但解决方案似乎并不正确。让我们首先检查一个示例,这是test.js:Javascript Karma/Jasmine测试自定义指令控制器,javascript,unit-testing,angularjs-directive,jasmine,karma-runner,Javascript,Unit Testing,Angularjs Directive,Jasmine,Karma Runner,我正在用Karma+Jasmine测试AngularJS自定义指令。我找到了一种方法,通过查阅网上的许多参考资料来做到这一点。但解决方案似乎并不正确。让我们首先检查一个示例,这是test.js: angular.module("app", []) .directive("test", function() { return { restrict: 'E', scope: { defined: '=' }, templat
angular.module("app", [])
.directive("test", function() {
return {
restrict: 'E',
scope: {
defined: '='
},
templateFile: "test.html",
controller: function($scope) {
$scope.isDefined = function() {
return $scope.defined;
};
}
};
});
describe("Test directive", function() {
var elm, scope;
beforeEach(module("app"));
beforeEach(module("test.html"));
beforeEach(inject(function($rootScope, $compile, $injector) {
elm = angular.element("<test defined='defined'></test>");
scope = $rootScope;
scope.defined = false;
$compile(elm)(scope);
scope.$digest();
}));
it("should not be initially defined", function() {
expect(elm.scope().$$childTail.isDefined()).toBe(false);
});
});
我使用以下命令行运行测试:
karma start karma.conf.js
我觉得真正奇怪的是,控制器中定义的scope函数只能通过$$childTail
属性访问。如果我试图直接从元素的作用域调用它,我会得到一个未定义的值elm.scope().isDefined()
。有人有更好的解决方案吗
谢谢 因为您的指令使用了一个独立的作用域,而不是
elm.scope()
你应该能够使用
elm.isolateScope()
有关功能isolateScope
的说明,请参见
elm.scope()
elm.isolateScope()