【发布时间】:2015-12-26 06:36:06
【问题描述】:
我正在通过 gulp 运行 karma 测试用例,如下所示:
gulp.task('unit-test-karma', function () {
return gulp.src(filePaths.libraryPaths.concat(filePaths.codePathsVerbose.concat(filePaths.testPaths).concat(filePaths.htmlPaths).concat(filePaths.jadePaths)))
//.pipe(plumber({ errorHandler: notify.onError(function(error) { console.log(error.message); return "Karma Error"; }) }))
.pipe(karma({
configFile: './karma.conf.js',
action: 'run', // watch
singleRun: true,
reporters: [ 'dots' ]
}));
});
当我以run 的身份运行时,IE 11 会抛出以下错误。
IE 11.0.0 (Windows 10 0.0.0) ERROR
'expect' was used when there was no current spec, this could be because an asynchronous test timed out
at C:/BbCAT-WebDI/BbCAT-Web/BbCAT-Angular/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:938
但如果运行与watch 相同的操作,则所有测试用例在 chrome、IE 和 firefox 中都成功执行。
在阅读了一些帖子后,似乎 $http 服务调用存在一些问题,但无法找到问题的确切位置!
【问题讨论】:
-
您是否在单元测试中使用
$httpBackend来存根您的$http服务调用? docs.angularjs.org/api/ngMock/service/$httpBackend -
是的。这就是我想知道的原因,因为我正在测试的指令函数有 4 个 http 调用,并且都是用假响应模拟的,那么为什么它会抛出这个错误!
-
您是否消除了其他测试导致错误抛出的可能性,即确保您怀疑的测试是唯一正在运行的测试?
-
请给我们一些代码!
-
你的代码一团糟。这不是测试用例的样子。请重构它并使用 //given//when//then 模式,也只用一个单元案例测试一个,否则它将是一个庞大、复杂且不可维护的测试案例。此外,您拥有 10 多个 $httpBackend 模拟也是不正常的。尝试清除它,然后我们可以帮助找出问题所在。
标签: angularjs jasmine gulp karma-runner