# karma-custom-reporter

> A Karma plugin. Report results in MSTest trx format or custom xml format.

## Installation

The easiest way is to keep `karma-custom-reporter` as a devDependency in your `package.json`.
```json
{
  "devDependencies": {
    "karma": "~0.10",
    "karma-custom-trx-reporter": "~0.1"
  }
}
```

You can simple do it by:
```bash
npm install karma-custom-reporter --save-dev
```

## Configuration
```js
// karma.conf.js
module.exports = function(config) {
  config.set({
    plugins: [
      ...
      require('karma-custom-reporter')
    ],
    
    reporters: ['progress', 'custom-trx'],

    // the default configuration
    customTrxReporter: {
            outputFile:'',
            shortTestName:false,
            asSeparateFile: false,
            separateFileName: 'custom.xml', // can be type of file
            rootElement: 'CustomSection', // can be overridden with any text
            testXmlFormater: null // syntax for this formater is like: function (xmlSectionObject, data) {} 
    }
  });
};
```

### outputFile
The output file specifies where the xml file will be written.

### shortTestName
The custom-trx reporter will attend the browser name to the test name by default.

This can be switched off with the `shortTestName` config property.

### nameFormatter
You can provide a custom function to format the `testName` field of the trx.

The `nameFormatter` is a function with parameters `(browser, result)` which returns a string.

When `shortTestName` is `true`, `nameFormatter` is ignored.

### asSeparateFile
When is set to true the reporter will generate a separate file besides the .trx file.

When is set to false (default value) the xml data will be included in .trx file under `rootElement` value (as element name) 
### separateFileName
Name of the generated file, when `asSeparateFile` is set to true
### rootElement
The parent element name for all xml unit tests
### testXmlFormater
A function for creating any custom xml format for each test

Syntax for function is ``` function (xmlSectionObject, data) {} ```

Parameters:

**xmlSectionObject** - [xmlbuilder] object

**data** - unit test data info 
```js     
data: { unitTestId, unitTestName, className, executionId, codeBase, hostName, duration, result } 
result: {fullName, description, id, log, skipped, disabled, pending, success, suite, time, executedExpectationsCount, passedExpectations, properties }
```

Example: 
```js 
function (xmlSectionObject, data) {
  xmlSectionObject.ele('any-text')
        .attr('name', data.unitTestName)
        .attr('duration', data.duration)
        .attr('description', '${data.unitTestName} from class ${data.className} ${result.skipped ? "was skipped":""}')
} 
```

You can pass list of reporters as a CLI argument too:
```bash
karma start --reporters custom-trx,dots
```

----

For more information on Karma see the [homepage].

[homepage]: http://karma-runner.github.com
[xmlbuilder]: https://github.com/oozcitak/xmlbuilder-js#readme
