Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get JUnit XML output from Jest?

I have a React app that has Jest tests. I'm configuring Jest in my 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"
    ]
  },
…

The setup-jasmine-env.js looks like this:

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

It took a bit of working to get that jasmine env setup correctly, but I"m not seeing anything in the output directory (indeed, it isn't created and creating it myself doesn't help). I suspect that my alterations to the jasmine var aren't the same one that Jest is using, but I can't figure out how to hook them together.

like image 332
Drew Stephens Avatar asked Dec 23 '15 02:12

Drew Stephens


People also ask

What is JUnit XML?

JUnit xml is a framework that was used in many applications in the test frameworks. By default, the test will generate xml files which are simple reports used for the execution of the test. These files are used to generate the report which was custom, we can also generate the reports as per the requirement of testing.


3 Answers

If you use a more recent version of jest (I'm looking at 16.0.2), you don't need to specify the testrunner because jasmine is the default. You also don't need the unmockedModulePathPatterns section of the jest config.

I.e. you just need to include the following devDependencies in your package.json:

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

And add this jest config to your package.json (note: you no longer need the unmockedModulePathPatterns section):

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

And then use Drew's setup-jasmine-env.js from the question.

like image 197
supamanda Avatar answered Oct 28 '22 03:10

supamanda


Jest has support for its own reporters via the testResultsProcessor config. So I wrote up a little thing that generates compatible junit xml for this. You can find it here. https://github.com/palmerj3/jest-junit

like image 27
Jason Palmer JSONP Avatar answered Oct 28 '22 04:10

Jason Palmer JSONP


looks like all you're missing from the above setup is to add jasmine-reporters to unmockedModulePathPatterns, so give the following a go:

"jest": {

   ...

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

Hope that helps!

UPDATE: for anyone else experiencing this problem, I have put a working demo up here.

like image 4
Joe Devine Avatar answered Oct 28 '22 03:10

Joe Devine