Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kmiyashiro/grunt-mocha
[MOVED] Grunt task for running mocha specs in a headless browser (PhantomJS)
https://github.com/kmiyashiro/grunt-mocha
grunt-mocha grunt-plugins grunt-task mocha phantomjs test-automation test-runner testing
Last synced: 3 months ago
JSON representation
[MOVED] Grunt task for running mocha specs in a headless browser (PhantomJS)
- Host: GitHub
- URL: https://github.com/kmiyashiro/grunt-mocha
- Owner: kmiyashiro
- License: mit
- Archived: true
- Created: 2012-04-26T14:25:03.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2017-04-09T19:56:50.000Z (over 7 years ago)
- Last Synced: 2024-09-23T23:32:27.985Z (3 months ago)
- Topics: grunt-mocha, grunt-plugins, grunt-task, mocha, phantomjs, test-automation, test-runner, testing
- Language: JavaScript
- Homepage:
- Size: 238 KB
- Stars: 369
- Watchers: 9
- Forks: 106
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- Changelog: HISTORY.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-MIT
Awesome Lists containing this project
README
# Repo deprecated
Disqus has adopted this project and npm module, visit https://github.com/disqus/grunt-mocha for further updates.
---
# grunt-mocha
> Automatically run *client-side* mocha specs via grunt/mocha/PhantomJS
For a grunt task for server-side mocha tests, see [grunt-mocha-test](https://github.com/pghalliday/grunt-mocha-test) or [grunt-simple-mocha](https://github.com/yaymukund/grunt-simple-mocha)
## Getting Started
This plugin requires Grunt `~0.4.0`. Use a `0.1.x` tag of this plugin to use with Grunt `~0.3.0`.
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
```shell
npm install grunt-mocha --save-dev
```Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
```js
grunt.loadNpmTasks('grunt-mocha');
```## Mocha task
_Run this task with the `grunt mocha` command._### Settings
#### files/src
Type: `String|Array`
This defines which HTML spec files to run using PhantomJS. These are the same files you would open to run tests in a browser.
There are a number of options available. Please review the [minimatch options here](https://github.com/isaacs/minimatch#options).
Example:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
},
},
```#### dest
Type: `String`
Default: `undefined`Write reporter output to a file. Useful if you need a file to feed your CI bot.
Example:
```js
mocha: {
test: {
options: {
reporter: 'XUnit'
},
src: ['tests/**/*.html'],
dest: './test/output/xunit.out',
},
},
```#### options.run
Type: `Boolean`
Default: `true`grunt-mocha injects a script into the PhantomJS instance that loads your HTML spec files. The file sets up a reporter and listeners so the output can be output in the command line. This option will call `mocha.run()` after the script is injected, ensuring that the proper listeners are setup.
You may want to set this to false if your files are loaded asynchronously via AMD and call `mocha.run` in your own callback.
In HTML spec:
```html// Only tests run in real browser, injected script run if options.run == true
if (navigator.userAgent.indexOf('PhantomJS') < 0) {
mocha.run();
}```
Gruntfile:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
options: {
run: true,
},
},
},
```#### options.urls
Type: `Array|String`
Default: `[]`Instead of files, hit these URLs. Usually used in conjunction with the connect task to spin up a server for testing.
```js
connect: {
server: {
options: {
port: 8888,
base: '.',
},
},
},
mocha: {
test: {
options: {
urls: [ 'http://localhost:8888/example/test/test2.html' ],
},
},
},
```Then run:
```
grunt connect mocha
```#### options.timeout
Type: `Number`
Default: `5000`PhantomJS timeout in milliseconds. If nothing happens within 5 seconds, exit.
Example:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
options: {
timeout: 10000,
},
},
},
```#### options.bail
Type: `Boolean`
Default: `false`Call `grunt.warn` and exit the grunt task on the first failed test. This only calls `grunt.warn` after the entire spec file is finished.
Example:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
options: {
bail: true,
},
},
},
```#### options.growlOnSuccess
Type: `Boolean`
Default: `true`Display a Growl notification when all tests successfully pass.
Example:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
options: {
growlOnSuccess: false,
},
},
},
```#### options.log
Type: `Boolean`
Default: `false`Print any `console.log` calls from PhantomJS to the command line. Only used for very quick and dirty debugging. It is highly recommended that you open the failing spec file in a browser so you can use much richer debugging tools.
Example:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
options: {
log: true,
},
},
},
```#### options.logErrors
Type: `Boolean`
Default: `false`Fail and output script errors.
Example:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
options: {
logErrors: true,
},
},
},
```#### options.mocha
Type: `Object`A mocha options simple object. Very few options are currently supported. Actually, I think `grep` is the only one.
Example:
```js
mocha: {
test: {
src: ['tests/**/*.html'],
options: {
mocha: {
grep: 'router*'
}
}
},
},
```#### options.reporter
Type: `String`
Default: `'Dot'`The reporter to use. **Note:** XUnit and those types of reporters should probably use the `dest` option.
Example:
```js
mocha: {
test: {
files: ['tests/**/*.html'],
options: {
reporter: 'Nyan',
}
},
},
```Custom reporter example:
Example:
```js
mocha: {
test: {
files: ['tests/**/*.html'],
options {
reporter: './path/to/custom/reporter', // included via require
},
},
},
```### options.page
Type: `Object`Set properties in the PhantomJS webpage instance used for tests, see http://phantomjs.org/api/webpage/
Example:
```js
mocha: {
test: {
options: {
page: {
settings: {
webSecurityEnabled: false, // disable cors checks in phantomjs
},
},
},
},
},
```## Hacks
The PhantomJS -> Grunt superdimensional conduit uses `alert`. If you have disabled or aliased alert in your app, this won't work. I have conveniently set a global `PHANTOMJS` on `window` so you can conditionally override alert in your app.
## Examples
### Vanilla JS
#### Option 1 (recommended)
- Write mocha task description in grunt config using and specify `run: true` option (see [this task's Gruntfile.js](Gruntfile.js) for details);
- Check for PhantomJS `userAgent` in a test html file and run tests only in a real browser (see [test2.html](example/test/test2.html) for details).In this case you shouldn't include [bridge.js](phantomjs/bridge.js) (it will be included automatically) and tests will be run from [bridge.js](phantomjs/bridge.js).
#### Option 2
Alternatively, include `bridge.js` from `tasks/phantomjs` after you include `mocha.js` and run `mocha.setup` in your HTML file. The helper will override `mocha.setup` if it detects PhantomJS. See [test.html](example/test/test.html).
### AMD
Mocha **must** be included via script tag in the header. There is no need to load Mocha via AMD. You may load other testing libs via AMD if that gives you a fuzzy feeling.
Example setup with AMD (advanced): https://gist.github.com/2655876
## License
Copyright (c) 2013 Kelly Miyashiro
Licensed under the MIT license.