Fluent (i.e. chainable) syntax for generating vows tests against CLI tools.
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 = require'child_process'execvows = require'vows'assert = require'assert';vowsdescribe'uname'addBatch"When using uname":"calling without arguments":exec'uname' thiscallback;assertmatchstdout /Linux/;exportmodule;
This same code can be implemented like this using CLIeasy:
var CLIeasy = require'cli-easy'assert = require'assert';CLIeasydescribe'uname';use'uname'discuss'when using uname'discuss'calling without arguments'expect'should return Linux' 'Linux\n'exportmodule;
There are two ways to use CLIeasy in your own project:
- Using npm
- Using vows directly
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
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
$ 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).