Skip to content

CasualBot/jest-sonar-reporter

 
 

Repository files navigation

Jest Sonar Reporter

Quality Gate Status Maintainability Rating

@casualbot/jest-sonar-reporter is a custom results processor for Jest derived from Christian W. original work here.

It has been updated to be usable as a reporter in the jest.config, as well as, provide the ability to output relative paths for the generated XML file.

Installation

Using npm:

npm install --save-dev @casualbot/jest-sonar-reporter

Using yarn:

yarn add --dev @casualbot/jest-sonar-reporter

Usage

In your jest config add the following entry:

{
  "reporters": [ "default", "@casualbot/jest-sonar-reporter" ]
}

Then simply run:

jest

For your Continuous Integration you can simply do:

jest --ci --reporters=default --reporters=@casualbot/jest-sonar-reporter

Usage as testResultsProcessor (deprecated)

The support for testResultsProcessor is only kept for [legacy reasons][test-results-processor] and might be removed in the future. You should therefore prefer to configure @casualbot/jest-sonar-reporter as a reporter.

Should you still want to, add the following entry to your jest config:

{
  "testResultsProcessor": "@casualbot/jest-sonar-reporter"
}

Then simply run:

jest

For your Continuous Integration you can simply do:

jest --ci --testResultsProcessor="@casualbot/jest-sonar-reporter"

Configuration

@casualbot/jest-sonar-reporter offers several configurations based on environment variables or a @casualbot/jest-sonar-reporter key defined in package.json or a reporter option. Environment variable and package.json configuration should be strings. Reporter options should also be strings exception for suiteNameTemplate, classNameTemplate, titleNameTemplate that can also accept a function returning a string.

Environment Variable Name Reporter Config Name Description Default Possible Injection Values
JEST_SUITE_NAME suiteName name attribute of <testsuites> "jest tests" N/A
JEST_SONAR_OUTPUT_DIR outputDirectory Directory to save the output. process.cwd() N/A
JEST_SONAR_OUTPUT_NAME outputName File name for the output. "jest-report.xml" N/A
JEST_SONAR_OUTPUT_FILE outputFile Fullpath for the output. If defined, outputDirectory and outputName will be overridden undefined N/A
JEST_SONAR_56_FORMAT formatForSonar56 Will generate the xml report for Sonar 5.6 false N/A
JEST_SONAR_RELATIVE_PATHS relativePaths Will use relative paths when generating the xml report false N/A
JEST_SONAR_UNIQUE_OUTPUT_NAME uniqueOutputName Create unique file name for the output jest-sonar-report-${uuid}.xml, overrides outputName false N/A
JEST_SONAR_SUITE_NAME suiteNameTemplate Template string for name attribute of the <testsuite>. "{title}" {title}, {filepath}, {filename}, {displayName}
JEST_SONAR_CLASSNAME classNameTemplate Template string for the classname attribute of <testcase>. "{classname} {title}" {classname}, {title}, {suitename}, {filepath}, {filename}, {displayName}
JEST_SONAR_TITLE titleTemplate Template string for the name attribute of <testcase>. "{classname} {title}" {classname}, {title}, {filepath}, {filename}, {displayName}
JEST_SONAR_ANCESTOR_SEPARATOR ancestorSeparator Character(s) used to join the describe blocks. " " N/A
JEST_SONAR_ADD_FILE_ATTRIBUTE addFileAttribute Add file attribute to the output. This config is primarily for Circle CI. This setting provides richer details but may break on other CI platforms. Must be a string. "false" N/A
JEST_SONAR_INCLUDE_CONSOLE_OUTPUT includeConsoleOutput Adds console output to any testSuite that generates stdout during a test run. false N/A
JEST_SONAR_INCLUDE_SHORT_CONSOLE_OUTPUT includeShortConsoleOutput Adds short console output (only message value) to any testSuite that generates stdout during a test run. false N/A
JEST_SONAR_REPORT_TEST_SUITE_ERRORS reportTestSuiteErrors Reports test suites that failed to execute altogether as error. Note: since the suite name cannot be determined from files that fail to load, it will default to file path. false N/A
JEST_SONAR_NO_STACK_TRACE noStackTrace Omit stack traces from test failure reports, similar to jest --noStackTrace false N/A
JEST_USE_PATH_FOR_SUITE_NAME usePathForSuiteName DEPRECATED. Use suiteNameTemplate instead. Use file path as the name attribute of <testsuite> "false" N/A

You can configure these options via the command line as seen below:

JEST_SUITE_NAME="Jest JUnit Unit Tests" JEST_SONAR_OUTPUT_DIR="./artifacts" jest

Or you can also define a @casualbot/jest-sonar-reporter key in your package.json. All are string values.

{
  ...,
  "jest": {
    "rootDir": ".",
    "testResultsProcessor": "@casualbot/jest-sonar-reporter"
  },
  "@casualbot/jest-sonar-reporter": {
    "suiteName": "jest tests",
    "outputDirectory": "coverage",
    "outputName": "jest-report.xml",
    "uniqueOutputName": "false",
    "classNameTemplate": "{classname}-{title}",
    "titleTemplate": "{classname}-{title}",
    "ancestorSeparator": "",
    "usePathForSuiteName": "true",
    "relativePaths": "true"
  }
}

Or you can define your options in your reporter configuration.

// jest.config.js
{
    reporters: [
        'default', 
        [ 
            '@casualbot/jest-sonar-reporter',
            {
                relativePaths: true,
                outputName: 'sonar-report.xml',
                outputDirectory: 'coverage'
            }
        ]
    ],
}