Javascript Karma/Jasmine测试自定义指令控制器

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

我正在用Karma+Jasmine测试AngularJS自定义指令。我找到了一种方法,通过查阅网上的许多参考资料来做到这一点。但解决方案似乎并不正确。让我们首先检查一个示例,这是test.js:

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()