我在这个应用程序中有很多测试正在通过,但在集成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
答案 0 :(得分:1)
我意识到根本原因只是一些缺少的模块。似乎我的ui-router的集成需要将更多文件添加到karma配置中,而不是我想的。
当我问这个问题时,错误信息非常基本,这就是我头痛的原因。我通过使用Chrome作为浏览器在Karma配置中进行测试来解决此问题。这个开关立刻向我展示了这个问题。显然,PhantomJS删除/不添加错误消息的多汁部分(读取:实际的角度错误)。
因此,如果您在每次测试中随机失败,那么我建议您切换到Chrome浏览器,看看您是否获得了所有内容。