业力测试成功,但 PhantomJS 返回"An error was thrown in afterAll"语法错误:意外的令牌','



我们所有的业力单元测试似乎在我们的自动化构建中都成功了,但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
  • karma@4.1.0
  • npm@6.9.0
  • 节点.js@v12.3.1

业力.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
}
}
});
}

我尝试过的事情:

  • 业力/节点.js的几个不同版本。
  • 一些类似的问题表明,我们的测试中存在竞争条件,我们应该禁用 karma 的默认随机排序,但这并没有帮助。
  • 在我们的 .spec.js 文件中的任何地方都没有异步。

我的下一步:我想我将开始禁用单个测试,看看它们中是否有任何对这个 afterAll 结果有影响。

更新:通过x描述禁用所有测试未解决错误。所以我知道错误与测试本身无关,而是与插件/库中的某些错误或不兼容有关。

显然 PhantomJS 自 2016 年 (v2.1.1) 以来就没有更新过,也不是一个活跃的项目。似乎建议用ChromeHeadless替换项目中的PhantomJS。

就连PhantomJS维护者Vitaliy Slobodin也这样评价ChromeHeadless:

我认为人们最终会转向它。铬更快, 比PhantomJS更稳定。它不会像疯了一样吞噬记忆。

找到一个不依赖于Google的无头浏览器会很好,但显然PhantomJS无论如何都在使用基于WebKit的引擎,所以我们并没有因为进行此更改而真正失去任何浏览器的多样性/广度。

按照链接文章中的说明,我的问题消失了,有点。我确实遇到了另一个与缺少库引用相关的类似 afterAll 错误。我怀疑这与PhantomJS的错误相同,但没有正确报告。切换到ChromeHeadless后,错误已正确报告并且易于修复。

最新更新