New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

cli-testing-tool

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cli-testing-tool

A testing library that allows you to test input and outputs of your CLI command.

  • 0.3.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
2
decreased by-33.33%
Maintainers
1
Weekly downloads
 
Created
Source

CLI Testing Tool

A testing library that allows you to test input and outputs of your CLI command.

Note: This is WIP but it should be ready enough for most common CLI use-cases I can think of

Installation

With NPM:

npm install --save-dev cli-testing-tool 

With Yarn:

yarn add --dev cli-testing-tool

Examples

Check out Interactive Examples on Stackblitz

Testing Colored Terminal Text

Check out this example of StackBlitz

// colored-greeting.test.js
const { createCommandInterface } = require('cli-testing-tool');

test('should print colored greetings', async () => {
  const commandInterface = createCommandInterface('node ./graphic-print.js', {
    cwd: __dirname, // considering, the test file is in the same directory as the cli file
  });
  await commandInterface.type('Saurabh\n');
  const terminal = await commandInterface.getOutput();

  // ANSI Escape codes are tokenized into readable text token in tokenizedOutput
  // Helpful when libraries like inquirer or prompts add ansi-escape codes.
  expect(terminal.tokenizedOutput).toBe(
    "What's your name?Hi, [BOLD_START][RED_START]Saurabh[COLOR_END][BOLD_END]!"
  );

  // ANSI Escape codes are not tokenized.
  expect(terminal.rawOutput).toBe(
    `What's your name?Hi, \x1B[1m\x1B[31mSaurabh\x1B[39m\x1B[22m!`
  );

  // ANSI Escape codes are removed
  expect(terminal.stringOutput).toBe(`What's your name?Hi, Saurabh!`);
});

Code of the CLI that we're testing in above snippet
// colored-greeting.js
const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

const bold = (str) => `\x1b[1m${str}\x1b[22m`;
const red = (str) => `\x1b[31m${str}\x1b[39m`;

readline.question(`What's your name?`, (name) => {
  console.log(`Hi, ${bold(red('Saurabh'))}!`);
  readline.close();
});

Options

You can pass options as 2nd param to createCommandInterface.

The default options are:

const defaultOptions = {
  typeDelay: 100, // number. delay between each `.type()` call
  logData: false, // boolean. if true, logs the command data on terminal
  logError: true, // boolean. if false, won't add command errors on terminal
  cwd: process.cwd(), // string. working directory from where your simulated command is executed
  env: undefined // object | undefined. environment variables object if there are any
};

Terminal Text Parsing Support Checklist

Refer to Full List of Ansi Escape Codes that need to be handled.

  • Normal text without ansi escape codes
  • Colored text
  • Cursor movement (Basic Support. Not tested)
  • Erase Line/Screen Clear (Basic Support. Not tested)
  • Screen Modes (No Support)
  • Private Modes (No Support)
  • Multiple Arguments (No Support. Difficult to support this)

Big Shoutout to

FAQs

Package last updated on 03 Dec 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc