| # karma-mocha |
| |
| [](https://github.com/karma-runner/karma-mocha) |
| [](https://www.npmjs.com/package/karma-mocha) [](https://www.npmjs.com/package/karma-mocha) |
| |
| [](https://travis-ci.org/karma-runner/karma-mocha) [](https://david-dm.org/karma-runner/karma-mocha) [](https://david-dm.org/karma-runner/karma-mocha#info=devDependencies) |
| |
| > Adapter for the [Mocha](http://mochajs.org/) testing framework. |
| |
| ## Installation |
| |
| Install `karma-mocha` and `mocha` into to your project via `npm`: |
| |
| ```shell |
| $ npm install karma-mocha mocha --save-dev |
| ``` |
| |
| `karma-mocha` should work with any version of `mocha`. |
| |
| Since `karma-mocha` is an adapter for [Karma](http://karma-runner.github.io), you likely have it installed already, but in case you don't: |
| |
| ```shell |
| $ npm install karma --save-dev |
| ``` |
| |
| If you're having trouble, Karma provides [detailed instructions](http://karma-runner.github.io/1.0/intro/installation.html) on installation. |
| |
| ## Configuration |
| Following code shows the default configuration... |
| ```js |
| // karma.conf.js |
| module.exports = function(config) { |
| config.set({ |
| frameworks: ['mocha'], |
| |
| files: [ |
| '*.js' |
| ] |
| }); |
| }; |
| ``` |
| |
| If you want to pass configuration options directly to mocha you can |
| do this in the following way |
| |
| ```js |
| // karma.conf.js |
| module.exports = function(config) { |
| config.set({ |
| frameworks: ['mocha'], |
| |
| files: [ |
| '*.js' |
| ], |
| |
| client: { |
| mocha: { |
| // change Karma's debug.html to the mocha web reporter |
| reporter: 'html', |
| |
| // require specific files after Mocha is initialized |
| require: [require.resolve('bdd-lazy-var/bdd_lazy_var_global')], |
| |
| // custom ui, defined in required file above |
| ui: 'bdd-lazy-var/global', |
| } |
| } |
| }); |
| }; |
| ``` |
| |
| If you want run only some tests matching a given pattern you can |
| do this in the following way |
| |
| ```sh |
| karma start & |
| karma run -- --grep=<pattern> |
| ``` |
| |
| or |
| |
| ```js |
| module.exports = function(config) { |
| config.set({ |
| ... |
| client: { |
| mocha: { |
| grep: '<pattern>', // passed directly to mocha |
| ... |
| } |
| ... |
| } |
| }); |
| }; |
| ``` |
| |
| If you want to expose test properties specific to `mocha`, you can use the `expose` option: |
| |
| ```js |
| module.exports = function(config) { |
| config.set({ |
| ... |
| client: { |
| mocha: { |
| expose: ['body'] // This will be exposed in a reporter as `result.mocha.body` |
| ... |
| } |
| ... |
| } |
| }); |
| }; |
| ``` |
| |
| If you already have a configuration for Mocha in an opts file, you can use the `opts` option: |
| |
| ```js |
| module.exports = function(config) { |
| config.set({ |
| ... |
| client: { |
| mocha: { |
| opts: 'test/mocha.opts' // You can set opts to equal true then plugin will load opts from default location 'test/mocha.opts' |
| ... |
| } |
| ... |
| } |
| }); |
| }; |
| ``` |
| |
| ## Internals |
| |
| On the end of each test `karma-mocha` passes to `karma` result object with fields: |
| |
| * `description` Test title. |
| * `suite` List of titles of test suites. |
| * `success` True if test is succeed, false otherwise. |
| * `skipped` True if test is skipped. |
| * `time` Test duration. |
| * `log` List of errors. |
| * `startTime` Milliseconds since epoch that the test started |
| * `endTime` Milliseconds since epoch that the test ended |
| * `assertionErrors` List of additional error info: |
| * `name` Error name. |
| * `message` Error message. |
| * `actual` Actual data in assertion, serialized to string. |
| * `expected` Expected data in assertion, serialized to string. |
| * `showDiff` True if it is configured by assertion to show diff. |
| * `mocha` An optional object listed if you use the `expose` option |
| |
| This object will be passed to test reporter. |
| |
| NB. the start and end times are added by the adapter whereas the duration is calculated by Mocha - as such they probably will not match arithmetically. Ie. `endTime - startTime !== duration`. These fields have been added so that timestamped reports can be matched up with other timestamped reports from the target device (eg. memory profiling data collected outside the browser) |
| |
| ---- |
| |
| For more information on Karma see the [homepage]. |
| |
| |
| [homepage]: http://karma-runner.github.com |