https://github.com/cliffano/cmdt
Command-line tool for testing command-line tools
https://github.com/cliffano/cmdt
cli nodejs testing
Last synced: 9 months ago
JSON representation
Command-line tool for testing command-line tools
- Host: GitHub
- URL: https://github.com/cliffano/cmdt
- Owner: cliffano
- License: mit
- Created: 2013-10-08T15:12:28.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2022-10-11T09:30:48.000Z (over 3 years ago)
- Last Synced: 2025-01-12T06:02:57.366Z (over 1 year ago)
- Topics: cli, nodejs, testing
- Language: JavaScript
- Homepage:
- Size: 643 KB
- Stars: 5
- Watchers: 3
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README

[](http://travis-ci.org/cliffano/cmdt)
[](http://david-dm.org/cliffano/cmdt)
[](https://coveralls.io/r/cliffano/cmdt?branch=master)
[](http://www.npmjs.com/package/cmdt)
[](http://npmjs.org/package/cmdt)
Cmdt
----
Cmdt is a command-line tool for testing command-line tools.
This is handy for testing a command line execution result by checking its exit code and output. Commands will be executed in a temporary directory /tmp/cmdt--/ , this directory will be removed after all tests are completed unless -d/--debug flag is specified.
Installation
------------
npm install -g cmdt
Usage
-----
Run tests on specified test files:
cmdt run .yml .yml
Run all test files contained in a directory:
cmdt run
Debug exit code and output of failing tests, temporary directory will be logged and won't be removed at the end of the execution:
cmdt run --debug .yml
Test File
---------
Set test command, expected exit code and/or output regular expression in a .yml file:
- description: should display user name
command: whoami
exitcode: 0
output: someuser
- command: time
exitcode: 0
output: real.+(\r\n?|\n)user.+
stdout: real.+(\r\n?|\n)user.+
- command: unknowncommand
exitcode: 1
stderr: ^some error$
Parameters can also be specified, and used in test command:
- params:
first_name: 'Theodore'
last_name: 'Twombly'
url: 'http://localhost'
- command: 'echo "Hey {first_name} {last_name}!"'
exitcode: 0
output: 'echo "Hey Theodore Twombly!"'
- command: 'wget {url}'
exitcode: 0
Environment variables are available as _env parameter in test commands:
NAME="Theodore Twombly" cmdt run .yml
- command: 'echo "Hello {_env.NAME}!"'
exitcode: 0
output: 'echo "Hello Theodore Twombly!"'
Test fixtures files and directories can be specified in fixtures array, which will then be copied to test execution directory:
# assuming path/to/data_dir/foobar.txt and path/to/another_dir/barfoo.txt exist
- fixtures:
- path/to/data_dir
- path/to/another_dir/barfoo.txt
- command: 'file foobar.txt'
exitcode: 0
- command: 'file barfoo.txt'
exitcode: 0
Test Fields
-----------
Name
Description
Mandatory
description
description of the test
No
command
command line to be executed
Yes
exitcode
expected exit code
No
output
stdout + stderr output, regexp matching
No
stdout
stdout only output, regexp matching
No
stderr
stderr only output, regexp matching
No
Screenshots
-----------


Colophon
--------
[Developer's Guide](https://cliffano.github.io/developers_guide.html#nodejs)
Build reports:
* [Code complexity report](https://cliffano.github.io/cmdt/complexity/plato/index.html)
* [Unit tests report](https://cliffano.github.io/cmdt/test/buster.out)
* [Test coverage report](https://cliffano.github.io/cmdt/coverage/buster-istanbul/lcov-report/lib/index.html)
* [Integration tests report](https://cliffano.github.io/cmdt/test-integration/cmdt.out)
* [API Documentation](https://cliffano.github.io/cmdt/doc/dox-foundation/index.html)