javascript - 具有外部依赖项的 Jasmine 单元测试指令失败并出现 TypeError : '[object Object]'

标签 javascript angularjs jasmine

当我运行它时,我的规范出现错误。我正在测试一个包含 this service 的指令。测试返回错误消息:

TypeError: '[object Object]' is not a function (evaluating 'angular('RecursionHelper')').

不确定我缺少什么才能使其发挥作用。我正在使用 Angular 1.3 和 Jasmine 2.0。

我的指令:

return RecursionHelper.compile(element, function (scope, Element, Attrs,     contro, transFn) {
   //directive functions
});

我的规范:

   beforeEach(function () {
       angular('RecursionHelper');
   });

  element = angular.element('<directive></directive>');
            $scope.directiveList = directiveList;
            RecursionHelper.compile(element)($scope);
            $scope.$digest();

最佳答案

beforeEach block 中,您应该加载包含该指令的应用程序模块。变化:

beforeEach(function () {
    angular('RecursionHelper');
});

致:

beforeEach(function () {
    module('MyApp'); //change to your application name. 
});

此外,您应该在每次 jasmine 测试之前注入(inject) $compile 服务和 $rootScope。您正在使用 compile 服务来渲染指令而不注入(inject)它。

只需添加到您的beforeEach:

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

最终代码应如下所示:

   beforeEach(function () {
       module('MyApp'); //change to your application name.
       inject(function($compile, $rootScope, $injector) {
           compile = $compile;
           $scope = $rootScope.$new();
       }); 
   });    


it('make an assertion', function() {
    var element = angular.element('<directive></directive>');
    $scope.directiveList = directiveList;
    compiledElement = compile(element)($scope);
    $scope.$digest();
});

关于javascript - 具有外部依赖项的 Jasmine 单元测试指令失败并出现 TypeError : '[object Object]' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34378920/

相关文章:

JavaScript 函数/方法上下文检查

javascript - ng-repeat 中的 Angular radio 验证

javascript - Angular : How to test a promise resolved in a callback function

javascript - 如何使用默认文件处理程序打开 html 文件并为窗口命名(即目标)?

javascript - 更改选项卡 javascript firefox 扩展的 url

javascript - 使用工厂公开一个简单的 API

angularjs - 如何使用 ng-click on ng-option(或其他赋值方式)

angular - 使组件测试具有主体或模拟 Renderer2

typescript - 错误 - node_modules\@types\jasmine\index.d.ts(138,230) TS1005 : ')' expected

javascript - 如何更新 AngularJS 指令中的类