Angularjs Karma Jasmine测试在集成ui路由器后全部失败

Angularjs Karma Jasmine测试在集成ui路由器后全部失败,angularjs,angular-ui-router,karma-runner,karma-jasmine,Angularjs,Angular Ui Router,Karma Runner,Karma Jasmine,我在这个应用程序中有很多测试都通过了,但是在集成了ui路由器之后,每个测试都失败了。我遇到了类似于TypeError:undefined不是对象的错误(评估“$httpBackend.verifyNoOutstandingExpectation”)。和TypeError:undefined不是对象(计算“$rootScope.$digest”)。一旦我进行了集成,测试中注入的任何东西都不再有效 只有在我插入$stateProvider、$stateParams或$urlRouteProvider

我在这个应用程序中有很多测试都通过了,但是在集成了ui路由器之后,每个测试都失败了。我遇到了类似于
TypeError:undefined不是对象的错误(评估“$httpBackend.verifyNoOutstandingExpectation”)
。和
TypeError:undefined不是对象(计算“$rootScope.$digest”)
。一旦我进行了集成,测试中注入的任何东西都不再有效

只有在我插入
$stateProvider、$stateParams或$urlRouteProvider
时,测试才会失败。如果我不注射,他们就会通过

是否有我需要的某种配置?有人知道为什么之前的注射突然都不存在了吗

错误示例

forEach@app/vendor/angular/angular.js:403:24
loadModules@app/vendor/angular/angular.js:4880:12
createInjector@app/vendor/angular/angular.js:4802:30
WorkFn@app/vendor/angular-mocks/angular-mocks.js:3163:60
app/vendor/angular/angular.js:4921:53
TypeError: undefined is not an object (evaluating '$rootScope.$digest') in app/core/test/sideBarDirTest.js (line 63)
app/core/test/sideBarDirTest.js:63:23
业力配置

    basePath: '',
    frameworks: ['jasmine'],
    files: [
        'app/vendor/jquery/dist/jquery.js',
        'app/vendor/angular/angular.js',
        'app/vendor/angular-resource/angular-resource.js',
        'app/vendor/angular-mocks/angular-mocks.js',
        'app/core/app.js',
        'app/core/envConfig.js',
        'app/core/sideBarDir.js',
        'app/core/app.js',
        'app/core/test/*.js',
        '**!/!*.html',
        {pattern: 'app/core/**/*.json', watched: true, served: true, included: false}
    ],
    exclude: [
        'app.js',
        '**/gulpfile.js'
    ],
    reporters: ['progress', 'coverage', 'junit'],
    preprocessors: {
        'app/**/*.html': ['ng-html2js'],
        'app/core/**/!(*Test|*test).js': 'coverage',
    },

    ngHtml2JsPreprocessor: {
        stripPrefix: 'app/',
        moduleName: 'html'
    },

    junitReporter: {
        outputFile: 'coverage/test-results.xml',
        suite: ''
    },

    coverageReporter: {
        type: 'lcov',
        dir: 'coverage/'
    },
    port: 9876,
    colors: true,
    config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,
    autoWatch: false,
    browsers: ['PhantomJS'],
    captureTimeout: 10000,
    singleRun: true

我意识到根本原因只是缺少一些模块。似乎我对ui路由器的集成需要在karma配置中添加比我想象的更多的文件

当我问这个问题时,错误信息非常基本,这就是引起我头痛的原因。我修复了这个问题,使用Chrome作为浏览器在Karma配置中进行测试。这个开关立即向我显示了这个问题。显然,PhantomJS去掉了/没有添加错误消息中有趣的部分(读取:实际角度错误)


因此,如果你随机地通过了以前通过的每个测试,那么我建议你切换到Chrome浏览器,看看你是否没有得到所有东西。

在你用于karma测试的应用程序中,你是否将
ngMock
列为依赖项?是的。当我使用ngRoute时,没有问题。你的测试中依赖于任何真正的http请求吗?是的,我在某一点上有各种类型的REST http请求。当我必须集成真实和模拟http请求的混合时,我必须集成本文中的建议以使其工作。它可能会帮助您:使用Chrome runner对调试非常有帮助。但不确定实际问题是否可以解决