junit-report-merger
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.5 • Public • Published

    junit-report-merger

    NPM version NPM downloads codecov MIT License

    Merges multiple JUnit XML reports into one.

    Reporters of many testing frameworks generate JUnit XML reports. mocha-junit-reporter, karma-junit-reporter to name a few. Sometimes there is a need to combine multiple reports together in a single file. This is what junit-report-merger does.

    junit-report-merger creates a new test results report in JUnit XML format by collecting all <testsuite> elements from all XML reports and putting them together.

    CLI

    Package provides a jrm binary, which you can use to merge multiple xml reports into one.
    In a nutshell it is a tiny wrapper around mergeFiles api.

    Installing

    Globally

    npm install -g junit-report-merger

    In this case you'll be able to execute jrm binary from within your shell.

    Locally

    npm install junit-report-merger --save-dev

    In this case jrm binary will be available only inside package.json scripts:

    scripts: {
        "merge-reports": "jrm combined.xml \"results/*.xml\""
    }
    

    Usage

    Assuming your JUnit test results are in ./results/units/ folder, and you want to get a combined test result file in ./results/combined.xml:

    jrm ./results/combined.xml "./results/units/*.xml"

    You can also specify multiple glob patterns:

    jrm ./results/combined.xml "./results/units/*.xml" "./results/e2e/*.xml"

    NOTE
    Make sure to wrap each pattern with double quotes ("), otherwise your shell may try to expand it instead of passing to Node.js.

    API

    Package exports a single object with the following methods.

    mergeFiles - Merges contents of multiple XML report files into a single XML report file.

    mergeStreams - Merges contents of multiple XML report streams into a single XML report stream.

    mergeToString - Merges multiple XML report strings into a single XML report string.

    Usage

    const path = require('path')
    const { mergeFiles } = require('junit-report-merger')
    
    const outputFile = path.join(__dirname, 'results', 'combined.xml')
    
    const inputFiles = ['./results/units/*.xml', './results/e2e/*.xml']
    
    try {
      await mergeFiles(outputFile, inputFiles)
      console.log('Merged, check ./results/combined.xml')
    } catch (err) {
      console.error(error)
    }

    mergeFiles

    Signature:

    mergeFiles(
        destFilePath: string,
        srcFilePathsOrGlobPatterns: string[],
        options?: MergeFilesOptions
    ) => Promise<void>
    
    mergeFiles(
        destFilePath: string,
        srcFilePathsOrGlobPatterns: string[],
        options: MergeFilesOptions,
        cb: (err?: Error) => void
    ) => void

    Reads multiple files, merges their contents and write into the given file.

    Param Type Description
    destFilePath string Where the output should be stored. Denotes a path to file. If file already exists, it will be overwritten.
    srcFilePathsOrGlobPatterns string[] Paths to the files which should be merged. You can also specify glob patterns, such as results/**/report-*.xml
    [options] MergeFilesOptions Merge options.
    [cb] (err?: Error) => void Callback function which will be called at completion. Will receive error as first argument if any.

    Last argument - cb is a Node.js style callback function. If callback function is not passed, function will return a promise. That is, all the following variants will work:

    // options passed, callback style
    mergeFiles(destFilePath, srcFilePaths, {}, (err) => {})
    
    // options missing, callback style
    mergeFiles(destFilePath, srcFilePaths, (err) => {})
    
    // options passed, promise style
    await mergeFiles(destFilePath, srcFilePaths, {})
    
    // options missing, promise style
    await mergeFiles(destFilePath, srcFilePaths)

    MergeFilesOptions

    These are the options accepted by mergeFiles.

    Signature:

    type MergeFilesOptions = {
        onFileMatched? (matchInfo: {
            filePath: string
        }) => void
    }

    onFileMatched

    mergeFiles calls function specified by the onFileMatched option once for each file matched by srcFilePaths, right before file processing begins.

    mergeStreams

    Signature:

    mergeStreams(
        destStream: WritableStream,
        srcStreams: ReadableStream[],
        options?: {}
    ) => Promise<void>
    
    mergeStreams(
        destStream: WritableStream,
        srcStreams: ReadableStream[],
        options: {},
        cb: (err?: Error) => void
    ) => void

    Reads multiple streams, merges their contents and write into the given stream.

    Param Type Description
    destStream WritableStream A stream which will be used to write the merge result.
    srcStreams ReadableStream[] Streams which will be used to read data from.
    [options] object Merge options. Currently unused.
    [cb] (err?: Error) => void Callback function which will be called at completion. Will receive error as first argument if any.

    Last argument - cb is a Node.js style callback function. If callback function is not passed, function will return a promise. That is, all the following variants will work:

    // options passed, callback style
    mergeStreams(destStream, srcStreams, {}, (err) => {})
    
    // options missing, callback style
    mergeStreams(destStream, srcStreams, (err) => {})
    
    // options passed, promise style
    await mergeStreams(destStream, srcStreams, {})
    
    // options missing, promise style
    await mergeStreams(destStream, srcStreams)

    mergeToString

    Signature:

    mergeToString(
        srcStrings: string[],
        options?: {}
    ) => string

    Merges given XML strings and returns the result.

    Param Type Description
    srcStrings string[] Array of strings to merge together.
    [options] object Merge options. Currently unused.

    License

    MIT (http://www.opensource.org/licenses/mit-license.php)

    Install

    npm i junit-report-merger

    DownloadsWeekly Downloads

    84,351

    Version

    3.0.5

    License

    MIT

    Unpacked Size

    20.3 kB

    Total Files

    14

    Last publish

    Collaborators

    • bhovhannes