2016-07-06 52 views
2

我想要获得一个基本的单元测试示例工作。这一切都正常工作与此app.js如何将ngRoute注入Jasmine/Karma AngularJS单元测试?

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 
     }); 
    }); 
}); 

与此因缘文件配置

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出现的问题我的模块在app.js像这样

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

在这种情况下,我得到了因果报应以下错误:

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

那么怎么办[更新,即使我没有角,mock.js库加载到因果报应如上图所示出现此错误] ...我正确地注入ngRoute到spec.js中?我尝试了各种各样的东西,其中没有一个能够工作。

+0

如果你不加载ng-route的模拟,但只是允许加载angular.js中的那个,会发生什么? –

+0

@Amy Blankenship。我得到了描述的错误。我没有加载ng路由的模拟,因为我不知道如何......这正是问题 - 我怎样才能加载ng路由的模拟?除非你在谈论karma配置中的文件属性?如果我删除了这些,我仍然会得到同样的错误。 – geoidesic

+1

恩,你绝对是,除非它只是一个幻像文件,不存在于路径''node_modules/angular-mocks/angular-route/angular-route.js''。如果它不存在,那很可能会导致问题。 –

回答

2

显然,你会得到这个错误,因为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 

我希望这会帮助你。

+0

谢谢。我当时真的很愚蠢n00b ......基本上,业务配置中的包含路径是错误的,因为一些评论者试图指出尽管语言不太清楚。做得好! – geoidesic

+1

不客气。只是一个提示,下次尝试切换到铬会抛出一个有意义的错误! –