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 <file1>.yml <file2>.yml
Run all test files contained in a directory:
cmdt run <dir>
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 <file>.yml <dir>
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 <file>.yml <dir>
- 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
Build reports: