Javascript 如何将ngRoute注入Jasmine/Karma AngularJS单元测试?
我正在尝试让一个基本的单元测试示例正常工作。使用这个app.js,一切都很好Javascript 如何将ngRoute注入Jasmine/Karma AngularJS单元测试?,javascript,angularjs,karma-jasmine,ngroute,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(){ //d
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注入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正确注入spec.js?我尝试了很多方法,但都没有成功。显然,你会出现这个错误,因为
PhantomJS
无法实例化你的主角度模块whapp
。一个可能的原因是缺少文件node\u modules/angular mock/angular route/angular route.js
显然,您正在使用npm
来管理依赖关系。因此,请尝试将当前文件替换为:
node_modules/angular-route/angular-route.js
ui路由
模块也一样:
node_modules/angular-ui-router/release/angular-ui-router.js
我希望这会对您有所帮助。如果您不加载模拟ng路线,而只允许angular.js中的路线加载,会发生什么?@Amy Blankenship。我得到了描述的错误。我没有加载模拟ng路线,因为我不知道如何。。。这正是问题所在–如何加载模拟ng路线?除非你说的是karma配置中的文件属性?如果我删除了这些,我仍然会得到相同的错误。嗯,你绝对是,除非它只是一个幻影文件,在路径
'node\u modules/angular mock/angular route/angular route.js'
中不存在。如果它不存在,那么很可能会导致问题。对不起,也许我只是不清楚。我正在将其作为库加载是的。但是,如果我不将其作为库加载,我仍然会得到相同的错误。我所说的“我没有加载mock”的意思是,我没有将它作为依赖项注入spec.js,因为我不知道如何操作——我想我需要,但不清楚如何操作。谢谢。我是一个非常愚蠢的n00b。。。基本上,karma配置中的包含路径是错误的,正如一些评论者试图指出的那样,尽管语言不太清晰。做得好!不客气。只是一个提示,下次尝试切换到chrome时,它将抛出一个有意义的错误!