npm package: @mcronin29/mochawesome-merge
Description: Merge several Mochawesome JSON reports
Author: Anton Telesh
Latest version: 0.0.6-development

# mochawesome-merge

[![CircleCI](https://circleci.com/gh/Antontelesh/mochawesome-merge.svg?style=svg)](https://circleci.com/gh/Antontelesh/mochawesome-merge)
[![codecov](https://codecov.io/gh/Antontelesh/mochawesome-merge/branch/master/graph/badge.svg)](https://codecov.io/gh/Antontelesh/mochawesome-merge)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)

Merge several [Mochawesome](https://github.com/adamgruber/mochawesome) JSON reports

## Installation

via `yarn`:

```
$ yarn add mochawesome-merge --dev
```

via `npm`:

```
$ npm install mochawesome-merge --save-dev
```

## Examples

### JavaScript API

```javascript
const { merge } = require('mochawesome-merge')

// See Params section below
const options = {
  files: [
    './report/*.json',

    // you can specify more files or globs if necessary:
    './mochawesome-report/*.json',
  ],
}

merge(options).then(report => {
  console.log(report)
})
```

### CLI

```
$ npx mochawesome-merge ./report/*.json -o output.json
```

or legacy usage

```
$ npx mochawesome-merge ./report/*.json > output.json
```

You can specify as many paths as you wish:

```
$ npx mochawesome-merge ./report/*.json ./mochawesome-report/*.json -o output.json
```

You can also use a named option for the files like so:

```
$ npx mochawesome-merge -f ./report/*.json ./mochawesome-report/*.json -o output.json
```

### Params

- `files`: list of source report file paths. Can include glob patterns.
- Aliases: `-f | --files` or first positional argument
- Defaults to `["./mochawesome-report/mochawesome*.json"]`.
#
- `output`: a file path to the bundled results. Should be a `json` file 
- Aliases: `-o | --output`
- Defaults to `stdout`.

## Migration to v4

Version 4 has come with a breaking change —
it no more accepts params like `reportDir` or `rootDir`.
Instead, it now accepts a list of file paths or glob patterns
to source report files. If you are migrating to version 4
you likely have to change your params accordignly.

### JavaScript API

Let's say you have a bunch of reports that you want to merge
under `./mochawesome-report` directory.
Then you're probably using mochawesome-merge like this:

```js
merge({
  reportDir: "mochawesome-report",
});
```

After switching to version 4 you need to rename
`reportDir` param to `files`
and change the value to point to your files
rather than the directory:

```diff
merge({
-  reportDir: "mochawesome-report",
+  files: ["./mochawesome-report/*.json"],
})
```

### CLI

After upgrading to version 4 all you need
is to remove the `--reportDir` option
and instead specify a glob pattern
or several ones if necessary, separating each one with a space:

```diff
- npx mochawesome-merge --reportDir mochawesome-report > mochawesome.json
+ npx mochawesome-merge ./mochawesome-report/*.json > mochawesome.json
```

## [Cypress](https://github.com/cypress-io/cypress)

The main motivation to create this library was to be able to use [mochawesome](https://github.com/adamgruber/mochawesome) together with [Cypress](https://github.com/cypress-io/cypress).

Since the version `3.0.0`, Cypress runs every spec separately, which leads to generating multiple mochawesome reports, one for each spec. `mochawesome-merge` can be used to merge these reports and then generate one HTML report for all your cypress tests.

First, configure `cypress.json`:

```jsonc
{
  // use mochawesome reporter as usually
  "reporter": "mochawesome",
  "reporterOptions": {
    // disable overwrite to generate many JSON reports
    "overwrite": false,
    // do not generate intermediate HTML reports
    "html": false,
    // generate intermediate JSON reports
    "json": true
  }
}
```

Then, write your custom script to run `cypress` together with `mochawesome-merge`:

```javascript
const cypress = require('cypress')
const marge = require('mochawesome-report-generator')
const { merge } = require('mochawesome-merge')

cypress.run().then(
  () => {
    generateReport()
  },
  error => {
    generateReport()
    console.error(error)
    process.exit(1)
  }
)

function generateReport(options) {
  return merge(options).then(report => marge.create(report, options))
}
```

Alternatively, you can use CLI to merge JSON reports and generate HTML report.
For example, an AWS CodeBuild `buildspec.yml` file might look something like this:

```yaml
phases:
  install:
    commands:
      - yarn install
  build:
    commands:
      - yarn cypress run
  post_build:
    commands:
      - yarn mochawesome-merge > mochawesome.json
      - yarn marge mochawesome.json
```