GitHub - sheremetyev/tests.js: Unit-testing for CLI (command-line interface) programs — writes to stdin, reads stdout.

Console Test Runner: writes to stdin, reads stdout.

tests.js is useful for test-driven development of command-line utilities. Works on Mac OS X, Windows and Linux so you can write cross-platform tests. Tests do not depend on the implementation language of the program.

Usage

You will need Node.js and NPM. Install using the following command.

Then create some .test files and execute the following command in the folder with tests.

Test files should have the following structure.

  • first line—command to execute (can be relative path, can contain pipeline of several commands),

  • then <<< and input to send to the program (can be multiple lines),

  • then >>> and expected output.

Example:

wc
<<<
one two three
>>>
       1       3      14

This test executes wc command, sends string one two three to its stdin and checks the output of the program.

When the test is run you should see something like

✓  /path/to/tests/wc.test: 9ms

✔  1 test complete (9ms)

To compare program’s output with expected output not as literal strings but as JSON objects write >>>JSON in the test file instead of >>>.

For more examples see https://github.com/sheremetyev/texts.js/tree/master/test.

Acknowledgements

The idea was borrowed from John MacFarlane’s tests format in Pandoc2.