The mocha-wav UI is a third-party mocha UI that enhances the standard Mocha BDD UI to include when(), action(), verify(), and afterVerify() functions. It simplifies building tests where the same actions and assertions should be run against various setup data.
While beforeEach enables you to use the same setup data for all tests, mocha-wav supports the inverse, enabling you to run the same assertions against multiple setup data.
Internally, mocha-wav creates a mocha it for each when defined. This it chains calls to the when, action, and verify functions. This enables you to write multiple test cases that perform the same action and verify logic, but with a different setup (when functions) for each test.
// Pseudocode representing the "it" generated for a single "when" declaration
it("when user is happy", function(done) {
whenFunction(function(whenResult) {
actionFunction(whenResult, function(actionResult) {
verifyFunction(whenResult, actionResult);
afterVerifyFunction(whenResult, actionResult, done);
});
});
});
```
# Use
## Install
Install the module into your project:npm install mocha-wav --save-dev
Override the default mocha UI by configuring mocha to use the `mocha-wav` UI:
mocha --ui mocha-wav test.js
When using `gulp-mocha`:
var gulp = require('gulp'); var mocha = require('gulp-mocha');
gulp.task('default', function () { return gulp.src('test.js', {read: false}) // gulp-mocha needs filepaths so you can't have any plugins before it .pipe(mocha({ ui: 'mocha-wav', reporter: 'nyan' })); });
## API
### action
Only one `action` may be defined within a `describe` context. If more than one is defined, that last one defined is used. The `action` function is asynchronous and should be defined before defining `when` scenarios.
action(function(whenResult, next){
}); ```
Only one verify may be defined within a describe context. If more than one is defined, that last one defined is used. The verify function is synchronous and should be defined before defining when scenarios.
verify(function (whenResult, actionResult) {
});
```
### afterVerify
Only one `afterVerify` may be defined within a `describe` context. If more than one is defined, that last one defined is used. The `afterVerify` function is asynchronous and should be defined before defining `when` scenarios.
afterVerify(function (whenResult, actionResult, next) { }); ```
Multiple whens may be defined within a describe context. The when functions are asynchronous should be defined after action and verify definitions.
when("something is set", function (next){
});
No formal process other than the standard opensource flow:
- Fork
- Modify
- Test
- Pull Request