如何从 Jest 获得 JUnit XML 输出?

How do I get JUnit XML output from Jest?

我有一个包含 Jest 测试的 React 应用程序。我正在 package.json:

中配置 Jest
…
  "jest": {
    "setupEnvScriptFile": "./test/jestenv.js",
    "setupTestFrameworkScriptFile": "./test/setup-jasmine-env.js",
    "testRunner": "node_modules/jest-cli/src/testRunners/jasmine/jasmine2.js",
    "unmockedModulePathPatterns": [
      "./node_modules/q",
      "./node_modules/react"
    ]
  },
…

setup-jasmine-env.js 看起来像这样:

var jasmineReporters = require('jasmine-reporters');
jasmine.VERBOSE = true;
jasmine.getEnv().addReporter(
  new jasmineReporters.JUnitXmlReporter({
    consolidateAll: true,
    savePath: "output/",
    filePrefix: "test-results"
  })
);

需要一些工作才能正确设置 jasmine env,但我在 output 目录中没有看到任何东西(实际上,它没有创建,我自己创建它也无济于事)。我怀疑我对 jasmine var 的更改与 Jest 使用的不同,但我不知道如何将它们连接在一起。

看起来您在上述设置中缺少的只是将 jasmine-reporters 添加到 unmockedModulePathPatterns,所以请尝试以下操作:

"jest": {

   ...

   "unmockedModulePathPatterns": [
     "./node_modules/q",
     "./node_modules/react",
     "./node_modules/jasmine-reporters"
   ]
},

希望对您有所帮助!

更新: 对于遇到此问题的任何其他人,我已经提供了一个工作演示 here

如果您使用更新版本的 jest(我正在查看 16.0.2),则无需指定 testrunner,因为 jasmine 是默认设置。您也不需要 jest 配置的 unmockedModulePathPatterns 部分。

即您只需要在 package.json:

中包含以下 devDependencies
"jasmine-reporters": "^2.2.0",
"jest": "^16.0.2",
"jest-cli": "^16.0.2"

并将这个笑话配置添加到您的 package.json(注意:您不再需要 unmockedModulePathPatterns 部分):

"jest": {
  "setupTestFrameworkScriptFile": "./setup-jasmine-env.js"
}

然后从问题中使用 Drew 的 setup-jasmine-env.js

Jest 通过 testResultsProcessor 配置支持自己的记者。所以我为此写了一个生成兼容的 junit xml 的小东西。你可以在这里找到它。 https://github.com/palmerj3/jest-junit