javascript - 如何将 ngRoute 注入(inject) Jasmine/Karma AngularJS 单元测试中?

标签 javascript angularjs karma-jasmine ngroute

我正在尝试让一个基本的单元测试示例正常工作。使用这个 app.js 一切正常

var whapp = angular.module('whapp', [])
.filter('reverse',[function(){
    return function(string){
        return string.split('').reverse().join('');
    }
}]);

和这个spec.js

describe('Filters', function(){ //describe your object type
    beforeEach(module('whapp')); //load module
    describe('reverse',function(){ //describe your app name
        var reverse, rootScope;
        beforeEach(inject(function($filter){ //initialize your filter
            reverse = $filter('reverse',{});
        }));
        it('Should reverse a string', function(){  //write tests
            expect(reverse('rahil')).toBe('lihar'); //pass
        });
    });
});

使用此 karma 文件配置

files: [
    'node_modules/angular/angular.js',
    'node_modules/angular-mocks/angular-mocks.js',
    'node_modules/angular-mocks/angular-route/angular-route.js',
    'node_modules/angular-mocks/angular-ui-router/release/angular-ui-router.js',
      'app/js/*.js',
      'tests/*.js'
]

当我尝试将 ngRoute 注入(inject)到 app.js 中的模块时,就会出现问题

var whapp = angular.module('whapp', ['ngRoute'])
.filter('reverse',[function(){
    return function(string){
        return string.split('').reverse().join('');
    }
}]);

在这种情况下,我在 karma 中遇到以下错误 [更新:即使我没有将 angular-mock.js 库加载到 karma 中,如上所示,也会发生此错误]

TypeError: undefined is not a constructor (evaluating 'reverse('rahil')') in tests/spec.js (line 9)

那么...如何正确地将 ngRoute 注入(inject)到 spec.js 中?我尝试了很多种方法,但都没有效果。

最佳答案

显然,您收到此错误是因为 PhantomJS 无法实例化您的主 Angular 模块 whapp。一个可能的原因是,文件 node_modules/angular-mocks/angular-route/angular-route.js 丢失。

显然,您正在使用 npm 来管理您的依赖项。因此,请尝试将当前文件替换为:

node_modules/angular-route/angular-route.js

ui-route 模块相同:

node_modules/angular-ui-router/release/angular-ui-router.js

希望这对您有帮助。

关于javascript - 如何将 ngRoute 注入(inject) Jasmine/Karma AngularJS 单元测试中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234610/

相关文章:

javascript - 当模型更新时,具有硬编码选项的 AngularJS 多重选择不会更新

javascript - 如何在后台运行服务器上的 Typescript 文件?

javascript - 将 javascript 传递给 angularjs 仅显示第一个值

javascript - Angular js中可以像静态数组一样吗?

javascript - 防止中键单击按钮在 FIREFOX 中打开新选项卡不起作用

javascript - 如何访问 ng-repeat 范围?

javascript - 如何根据用户在angularjs中的角色显示不同的菜单项?

angular - 无法在 docker 容器内运行 Angular 测试用例

angularjs - Angular UI 网格 onRegisterApi 函数的 Jasmine 测试用例

Angular 测试 HTTP Post 调用