An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

Avatar

[![Build Status](https://img.shields.io/travis/cliffano/cmdt.svg)](http://travis-ci.org/cliffano/cmdt)
[![Dependencies Status](https://img.shields.io/david/cliffano/cmdt.svg)](http://david-dm.org/cliffano/cmdt)
[![Coverage Status](https://img.shields.io/coveralls/cliffano/cmdt.svg)](https://coveralls.io/r/cliffano/cmdt?branch=master)
[![Published Version](https://img.shields.io/npm/v/cmdt.svg)](http://www.npmjs.com/package/cmdt)


[![npm Badge](https://nodei.co/npm/cmdt.png)](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
-----------

![Success with directory arg screenshot](../master/screenshots/success-dir.jpg?raw=true)
![Failure with file arg on debug mode screenshot](../master/screenshots/failure-file-debug.jpg?raw=true)

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)