我们使用一个名为'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应用程序有关,但如果是这样的话,为什么我仍然可以看到模块和规范?其他一切似乎都在起作用。这是文件夹设置的图片。