Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS karma jasmine测试可以';找不到路由提供程序_Angularjs_Unit Testing - Fatal编程技术网

AngularJS karma jasmine测试可以';找不到路由提供程序

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'

我有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',
                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']);