AngularJS karma jasmine测试可以';找不到路由提供程序
我有angular脚本post.js和test for it post_test.js 我的AngularJS karma jasmine测试可以';找不到路由提供程序,angularjs,unit-testing,Angularjs,Unit Testing,我有angular脚本post.js和test for it post_test.js 我的post.js文件 var Post = angular.module('Post', []); Post .config(['$routeProvider', function ($routeProvider) { $routeProvider .when('/post', { controller: 'PostCtrl'
post.js
文件
var Post = angular.module('Post', []);
Post
.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/post', {
controller: 'PostCtrl',
templateUrl: 'src/posts/partials/post.html'
})
;
}]);
和我的post_test.js
文件:
'use strict';
describe('Post module', function() {
beforeEach(module('Post'));
describe('Post controller', function(){
it('should ....', inject(function($controller) {
//spec body
var PostCtrl = $controller('PostCtrl');
expect(PostCtrl).toBeDefined();
}));
});
});
在karma.conf.js
I加载
files: [
'app/components/angular/angular.js',
'app/components/angular-route/angular-route.js',
'app/components/angular-mocks/angular-mocks.js',
'app/app.js',
'app/src/**/*.js' // post.js, post_test.js
],
看起来一切正常,但angular返回以下错误:
Error: [$injector:modulerr] Failed to instantiate module Post due to:
Error: [$injector:unpr] Unknown provider: $routeProvider
我不知道为什么。我在
post.js
之前加载angular route.js
。我检查过了,它装载正确。在定义$routeProvier
之前,我已将警报(1)
放在控制台中。因此,此文件正在正确加载,但在下一个文件-测试文件中,它仍然不起作用。ngRoute
模块也应该加载
替换:
var Post = angular.module('Post', []);
与:
但它正常工作——当我作为用户在angular应用程序中使用它时。它被加载到
app.js
中。app.js
中的脚本加载ngRoute和Post模块。也许我应该在karma.conf.js
中以不同的方式加载这些脚本?我猜是因为app.js中声明的模块在加载Post模块之前加载ngRoute。但这很容易出错。因为Post依赖于ngRoute,所以您应该在Post的dependencies数组中声明后者。此外,在post_test.js
中,在每次测试之前只加载post模块。ngRoute未加载,因为它不是Post模块的依赖项。您也可以在每个模块(“Post”、“ngRoute”)之前执行)
。但由于Post实际上取决于ngRoute,所以发布的答案更有意义。在依赖依赖它的每个模块中显式地加载依赖项(ngRoute)是可以的,这恰恰是为了避免类似这种情况。
var Post = angular.module('Post', ['ngRoute']);