0.1.2 • Published 10 years ago

mock-cli v0.1.2

Weekly downloads
4
License
ISC
Repository
github
Last release
10 years ago

mock-cli

npm version Stability Build Status

CLI capture tool for testing command-line apps

Overview

This tool allows you to simulate a separate command-line environment within the current process, automatically capturing any input/output for the simulated process. It works by temporarily faking process.argv and stdio (and optionally redirecting stdio), so your CLI app code has no idea it is actually being run in a test environment.

process.exit() and uncaught errors are handled gracefully, returning the process exit code and the captured stdio contents.

Example

var mockCli = require('mock-cli');
var assert = require('assert');

var argv = ['node', 'hello-world-app.js', '--foo', 'bar']; // Fake argv
var stdio = {
	stdin: require('./mocks/fakeInputStream'), // Hook up a fake input stream
	stdout: process.stdout, // Display the captured output in the main console
	stderr: process.stderr // Display the captured error output in the main console
};
var kill = mockCli(argv, stdio, function onProcessComplete(error, result) {
	var exitCode = result.code; // Process exit code
	var stdout = result.stdout; // UTF-8 string contents of process.stdout
	var stderr = result.stderr; // UTF-8 string contents of process.stderr

	assert.equal(exitCode, 0);
	assert.equal(stdout, 'Hello, world!\n');
	assert.equal(stderr, '');
});

// Execute the CLI task
require('./bin/hello-world-app');

// Kill the task if still running after one second
setTimeout(kill, 1000);

Usage

mockCli(argv, stdio, exitCallback)

Simulate a separate command-line environment within the current process

Arguments:

NameTypeRequiredDefaultDescription
argvArrayNoprocess.argvFake argv for the simulated process
stdioobjectNonullObject containing streams that are used to fake stdio
stdio.stdinStreamNonullInput stream that is piped into the simulated process as process.stdin
stdio.stdoutStreamNonullOutput stream that is connected to process.stdout of the simulated process
stdio.stderrStreamNonullError stream that is connected to process.stderr of the simulated process
errorCallbackfunctionNonullCallback that is invoked once the simulated process completes or throws an uncaught exception
  • errorCallback has the following signature:

    	##### `function(error, result)`
    
    	###### Arguments:
    
    	| Name | Type | Description |
    	| ---- | ---- | ----------- |
    	| `error` | `Error` | Uncaught exception thrown by the simulated process |
    	| `result` | `object` | Object containing information about the simulated process |
    	| `result.code` | `number` | Process exit code, or `1` on an uncaught exception |
    	| `result.stdin` | `string` | UTF-8 contents of `process.stdin`, captured during simulation |
    	| `result.stdout` | `string` | UTF-8 contents of `process.stdout`, captured during simulation |
    	| `result.stderr` | `string` | UTF-8 contents of `process.stderr`, captured during simulation |

Returns:

function Function that kills the simulated process (as if the user pressed Ctrl+C).

  • This function returns a results object, as seen in exitCallback arguments.