在Jasmine测试中获取自定义指令控制器的范围

时间:2014-06-12 11:02:02

标签: angularjs angularjs-directive jasmine angularjs-scope karma-jasmine

在jasmine中进行测试时,我正在尝试使用 **我的自定义角度指令** 访问范围

app.directive('MyDirective', function(){
return {
         template:...,
         scope:...,
         controller: function($scope){
                $scope.clickMe = function() {
                    ....
                  };
            $scope.message = "";
         }
 }

我想在茉莉花中编写一个测试来验证是否定义了clickMe方法。

 it('should have 3 methods', function() {
    expect(dscope).not.toBe(null);
    expect(scope).not.toBe(null);
    expect(angular.isFunction(dscope.clickMe)).toBe(true);
    expect(dscope.message).toBe(true); }

在beforeEach()中,我将范围和dscope变量声明如下:

beforeEach(inject(function(  $rootScope, $compile){
    scope = $rootScope.$new();      

    element = angular.element("<div my-directive></div>");

    //bind the empty scope into the directive
    $compile(element)(scope);

    //access to internal directive scope of our element
    dscope = element.scope();  }));

但是当我运行测试时,我得到“期望false为真。”* 并且期望undefined对于scope.message不为null

1 个答案:

答案 0 :(得分:17)

如果您使用的是Angular 1.2+,则必须使用...

dscope = element.isolateScope();

而不是......

dscope = element.scope();

访问隔离的范围。我无法判断你的范围是否被孤立,因为你在问题中省略了你的指令的范围声明,但我想象这里发生了什么。

请参阅Github上的this问题,了解.scope()和.isolateScope()之间区别的解释