在Jasmine中使用指令内部的scope函数失败

时间:2014-08-06 19:29:58

标签: angularjs angularjs-directive jasmine

我有一个像这样的链接的Angular ......

scope: {
      etud:"="
}

link: function(scope,element,attrs) {
        scope.getWarningClass = function(){
            var alertClass = "";
            if(scope.etud <= 2){
                alertClass = "red_alert";
            }
            else if(scope.etud <= 4){
                alertClass = "yellow_alert";
            }

            return alertClass;
        }
}

和部分相似...

<div class="sane" ng-class="getWarningClass()"></div>

我正试图用茉莉花来测试这个......

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

          it("Test 1", function (done) {
            ...
            scope.etud = 2.1;
            scope.$digest();
            expect(elm.hasClass("sane")).toBeTruthy();
            expect(elm.hasClass("red_alert")).not.toBeTruthy();
            expect(elm.hasClass("yellow_alert")).toBeTruthy();
            ..
          }

似乎ng-class函数永远不会被调用如果我将函数添加到测试中就像... ...

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

          it("Test 1", function (done) {
            ...
            scope.etud = 2.1;
            scope.getWarningClass = function(){
              var alertClass = "";
              if(scope.etud <= 2){
                alertClass = "red_alert";
              }
              else if(scope.etud <= 4){
                alertClass = "yellow_alert";
              }
              return alertClass;
            }
            scope.$digest();
            expect(elm.hasClass("sane")).toBeTruthy();
            expect(elm.hasClass("red_alert")).not.toBeTruthy();
            expect(elm.hasClass("yellow_alert")).toBeTruthy();
            ..
          }

但现在我需要2个地方的代码!有什么方法吗?

1 个答案:

答案 0 :(得分:0)

这里有几个问题,但道德是使用标签,所以我会做更接近......

的事情
var element = angular.element('<warning-box />');
view = $compile(element)(scope);
...

这当然会抛出一个关于它不期待另一个GET调用的例外。因此,您还需要使用$templateCache来提供部分内容。现在一切都按预期工作了。