A fluent (i.e. chainable) syntax for generating vows tests for CLI applications.
If you're going to use CLIeasy (and I hope you do), it's worth taking a moment to understand the way that vows manages flow control. Read up here on vowsjs.org (Under "Structure of a test suite"), or just remember vows uses this grammatical structure:
Suite → Batch* Batch → Context* Context → Topic? Vow* Context*
Got it? Good. There is a 1-to-1 relationship between a CLIeasy suite and a vows suite; CLIeasy is essentially a simpler syntax to manage a particular set of vows-based tests that conform to this pattern:
- Tests are performed by starting a CLI application
- Assertions are made against the
- Rinse. Repeat.
Here's a sample of the boilerplate code that CLIeasy eliminates:
var exec = execvows =assert = ;vows;
This same code can be implemented like this using CLIeasy:
## Using CLIeasy in your own project There are two ways to use CLIeasy in your own project:var CLIeasy =assert = ;CLIeasy;;
- Using npm
- Using vows directly
Using CLIeasy with npm
If you've used the
npm test command in [npm] before, this should be nothing new. You can read more about the npm test command here. All you need to do is add the following to your
"dependencies":"cli-easy": "0.1.x""scripts":"test": "vows test/*-test.js"
test/*-test.js is at your discretion. It's just an expression for all test files in your project.
After adding this to your
package.json file you can run the following to execute your tests:
$ cd path/to/your/project$ npm install$ npm test
Using CLIeasy with vows
When you install CLIeasy or take it as a dependency in your
package.json file it will not install [vows] globally, so to use vows you must install it globally.
$ [sudo] npm install vows -g
After installing vows you can simply run it from inside your project:
$ cd /path/to/your/project$ vows
Installing npm (node package manager)
$ curl | sh
$ [sudo] npm install cli-easy
Tests are written in vows and give complete coverage of all APIs and storage engines.
$ npm test
- Get feedback on what else could be exposed through this library.
- Improve it.
- Repeat (1) + (2).