specshell

Control a program (typically a shell) over standard I/O for testing it

Usage no npm install needed!

<script type="module">
  import specshell from 'https://cdn.skypack.dev/specshell';
</script>

README

Build status

specshell

Write JavaScript specs for shell commands

Installation

For use only within your tests:

npm install --save-dev specshell

More advanced usage may require:

npm install --save specshell

Features

  • Use any test framework (or none)
  • Use JavaScript or TypeScript

Quick start: testing shell commands

Write shell tests using your preferred test framework. Use specshell to run shell commands.

const specshell = require('specshell');

Create a new shell.

const shell = new specshell.Shell();

Send it a command and examine the results. Another process is involved so you must await the results of running any shell command. (Your test framework should support this; most do, including Jest, Mocha and Ava).

const assert = require('assert').strict;

async function test() {
  const { out, err } = await shell.run('echo hello, shell');
  assert.equal(out.toString(), 'hello, shell');
  assert.equal(err.toString(), '');
}
test();

Shell.run returns exitCode or signal for each command run. If the shell itself dies it throws specshell.ShellError.

API

Shell

constructor(shellPath, spawnOptions)

Constructs to use a shell found at shellPath (default '/bin/bash') passing spawnOptions. Currently these are the same as for child_process.spawn, but option stdio will be ignored if you pass it.

run(script)

Runs script inside shell: passes every line to the shell and a newline at the end.