用jasmine测试基本指令不起作用

时间:2016-05-10 13:35:18

标签: javascript angularjs unit-testing jsp jasmine

我们使用一个名为'ngEnter'的指令,可以在几个地方在线找到(这实际上是一个非常愚蠢的指令,但我正在学习如何使用Jasmine,而且这个有一个为它编写的测试。)我是我确定我已正确设置所有文件。 SpecRunner.html和spec文件的源文件位于正确的位置,对于karma.conf.js也是如此。当我运行specrunner并放置断点时,所有变量都是正确的,但由于某种原因,编译后的HTML不会调用该指令。我看到我们的应用程序首先加载了指令,我甚至将控制台日志放入以确保指令首先加载然后规范编译第二。

代码如下所示:

规格

describe('Directive: ngEnter', function () {

/**
* load the directive's module
*/
beforeEach(module(app));

var element,
scope;

beforeEach(inject(function ($rootScope) {

  scope = $rootScope;
  scope.mockFunction = function(){};
  compileDirective();

}));

/**
* Compile the directive into HTML
*/
function compileDirective(){
  element = angular.element('<input type="text" data-ng-enter="mockFunction()"/>');
  inject(function($compile){
    element = $compile(element)(scope);
  });
  scope.$apply();
}

it('should call the mock function upon pressing enter', function () {
  spyOn(scope, 'mockFunction');

  var e = jQuery.Event('keypress');
  e.which = 13;
  e.keyCode = 13;
  element.trigger(e);
  expect(scope.mockFunction).toHaveBeenCalled();
  });
});

JS

app.directive('ngEnter', function() {
  return function(scope, element, attrs) {
    element.bind("keydown keypress", function(event) {
        if (event.which === 13) {
            scope.$apply(function() {
                scope.$eval(attrs.ngEnter);
            });

            event.preventDefault();
          }
      });
  };
});

我可以做些什么来使这个测试起作用?我觉得它与我们在servlet上运行的web应用程序有关,但如果是这样的话,为什么我仍然可以看到模块和规范?其他一切似乎都在起作用。这是文件夹设置的图片。

localhost

0 个答案:

没有答案