Как получить JUnit XML-выход из Jest?

У меня есть приложение React, в котором есть тесты Jest. Я настраиваю Jest в своем package.json:

…
  "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 (действительно, она не создана и сама ее сама не помогает). Я подозреваю что мои изменения в var jasmine не совпадают с тем, что использует Jest, но я не могу понять, как их связать.

Ответ 1

похоже, что все, что вам не хватает в приведенной выше настройке, заключается в добавлении jasmine-reporters в unmockedModulePathPatterns, поэтому дайте следующее:

"jest": {

   ...

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

Надеюсь, что это поможет!

ОБНОВЛЕНИЕ: для всех, кто испытывает эту проблему, я разместил рабочую демонстрацию здесь.

Ответ 2

Если вы используете более новую версию шутки (я смотрю 16.0.2), вам не нужно указывать testrunner, потому что жасмин по умолчанию. Вам также не нужен раздел unmockedModulePathPatterns конфигурации jest.

т.е. вам просто нужно включить следующие devDependencies в package.json:

"jasmine-reporters": "^2.2.0",
"jest": "^16.0.2",
"jest-cli": "^16.0.2"

И добавьте эту конфигурацию jest в свой package.json (обратите внимание: вам больше не нужен раздел unmockedModulePathPatterns):

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

И затем используйте Drew setup-jasmine-env.js из вопроса.

Ответ 3

Jest поддерживает своих собственных репортеров через конфигурацию testResultsProcessor. Поэтому я написал небольшую вещь, которая генерирует совместимый junit xml для этого. Вы можете найти это здесь. https://github.com/palmerj3/jest-junit