集成ui-router后,Karma Jasmine测试全部失败

时间:2017-04-11 23:37:46

标签: angularjs angular-ui-router karma-runner karma-jasmine

我在这个应用程序中有很多测试正在通过,但在集成ui-router之后,每个测试都失败了。我收到TypeError: undefined is not an object (evaluating '$httpBackend.verifyNoOutstandingExpectation')这样的错误。和TypeError: undefined is not an object (evaluating '$rootScope.$digest')。一旦我进行集成,任何在测试中注入的东西都不再有效。

如果我注入$stateProvider, $stateParams or $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

Karma配置

    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

1 个答案:

答案 0 :(得分:1)

我意识到根本原因只是一些缺少的模块。似乎我的ui-router的集成需要将更多文件添加到karma配置中,而不是我想的。

当我问这个问题时,错误信息非常基本,这就是我头痛的原因。我通过使用Chrome作为浏览器在Karma配置中进行测试来解决此问题。这个开关立刻向我展示了这个问题。显然,PhantomJS删除/不添加错误消息的多汁部分(读取:实际的角度错误)。

因此,如果您在每次测试中随机失败,那么我建议您切换到Chrome浏览器,看看您是否获得了所有内容。