javascript - Karma 测试成功,但 PhantomJS 返回 "An error was throw in afterAll" SyntaxError: Unexpected token ','
问题描述
我们所有的业力单元测试似乎在我们的自动化构建中都成功了,但是 PhantomJS 运行器向构建框架(TeamCity)返回了一个非零结果。我可以在日志中找到的唯一错误是:
[17:53:31][JavaScript Unit Tests] PhantomJS 2.1.1 (Windows 8.0.0) ERROR
[17:53:31][JavaScript Unit Tests] An error was thrown in afterAll
[17:53:31][JavaScript Unit Tests] SyntaxError: Unexpected token ','
该项目正在使用:
- AngularJS@1.4.8
- 业力@4.1.0
- npm@6.9.0
- Node.js@v12.3.1
业力.conf.js:
// Karma Configuration
module.exports = function (config) {
config.set({
browsers: ["PhantomJS"],
files: [
"scripts/vendor/angularjs/1.4.8/angular.js",
"scripts/vendor/angularjs/1.4.8/angular-animate.js",
"scripts/vendor/*.js",
"scripts/angular/**/*.module.js",
"scripts/angular/**/*.app.js",
"scripts/angular/**/*.js",
"scripts/angular/**/spec/*.spec.js"
],
exclude: [
"scripts/vendor/angular-1*.js",
"scripts/vendor/angular-animate.js",
"scripts/angular/anycastManagementApp/anycastManagement.app.js",
"scripts/angular/cart/**/.js",
"scripts/angular/cart/*.js",
"scripts/vendor/bootstrap.min.js",
"scripts/angular/angular-bootstrap-datetimepicker/**/*.*"
],
plugins: [
"karma-jasmine",
"karma-jasmine-matchers",
"karma-chrome-launcher",
"karma-phantomjs-launcher",
"karma-teamcity-reporter",
"karma-spec-reporter",
"karma-coverage"
],
frameworks: ["jasmine", "jasmine-matchers"],
port: 9000,
logLevel: config.LOG_DEBUG,
client: {
jasmine: {
random: false
}
}
});
}
我尝试过的事情:
- 几个不同版本的 karma/Node.js。
- 一些类似的问题表明我们的测试中存在竞争条件,我们应该禁用 karma 的默认随机排序,但这没有帮助。
- 我们的 .spec.js 文件中没有任何异步。
我的下一步:我想我将开始禁用个别测试,看看它们中的任何一个是否对这个 afterAll 结果有影响。
更新:通过 xdescribe 禁用所有测试并不能解决错误。所以我知道这个错误与测试本身无关,而是与插件/库中的一些错误或不兼容有关。
解决方案
显然 PhantomJS 自 2016 年 (v2.1.1) 以来没有更新,并且不是一个活跃的项目。似乎建议是用 ChromeHeadless 替换项目中的 PhantomJS。
甚至 PhantomJS 的维护者 Vitaliy Slobodin 也谈到了 ChromeHeadless:
我认为人们最终会转向它。Chrome 比 PhantomJS 更快、更稳定。它不会像疯了一样吃掉记忆。
找到一个不依赖于 Google 的无头浏览器会很不错,但显然 PhantomJS 无论如何都在使用基于 WebKit 的引擎,所以我们并没有因为做出这个改变而失去任何浏览器的多样性/广度。
按照链接文章中的说明,我的问题在某种程度上消失了。我确实遇到了另一个与缺少库引用相关的类似afterAll 错误。我怀疑这与 PhantomJS 的错误相同,但没有正确报告。切换到 ChromeHeadless 后,错误被正确报告并且很容易修复。
推荐阅读
- reactjs - 将空函数传递给 React 组件
- node.js - 在 AWS amplify 中重写和重定向
- r - 如何根据年份模式匹配面板数据?
- javascript - 酶 ReactWrapper 未更新
- php - webp图像显示黑色背景而不是透明度
- objective-c - UIPrinterCutterBehavior 委托方法从未被调用
- azure - .net Core 上的 Microsoft.ProjectOxford.SpeechRecognition-x64
- python - Kubernetes 上的 Dask 工作人员找不到 csv 文件
- tomcat - 如何强制 Logback 将 jar 中的日志记录配置用于此 jar 中定义的类?
- oauth - Microsoft 声明 TenantId 已删除、更改或不可用