npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cli-spy

v0.2.2

Published

Helper utility for testing isolated cli modules.

Downloads

19

Readme

cli-spy

Build Status

Helper utility for testing isolated cli modules.

Usage

Example usage (using mocha) assuming the following application structure:

  • a main module in ./lib/index.js with an init() method
  • a cli module in ./lib/cli.js whose sole purpose is to init the main module with the parsed args
  • tests in ./test/ but being run from the root application directory
var cliSpy = require('cli-spy');

function stubIndexFn() {
    // Stub the index module, injecting the spy so it can report the args passed to init:
    require('./lib/index').init = function() {
        // The following placeholder is required:
        /*__spy__*/
    };
}

describe('My CLI', function() {
    var myCli = cliSpy('./lib/cli', stubIndexFn);

    it('parses some args', function() {
        var spy = myCli.exec('--some args -g -o --here', function(result) {
            var stdout = result.stdout,
                stderr = result.stderr,

                // JSON representation of the `arguments` to `index.init()`
                args = result.args;
        });
    });
});

API

var cliSpy = require('cli-spy');

cliSpy(pathToCli, stubIndexFn)

Initialises a spy for the given CLI module.

  • pathToCli {String} path (from the cwd) to the CLI module to spy on.
  • stubIndexFn {Function} stub implementation of the application's main module. Must include the following placeholder: /*__spy__*/.

Returns a spy for the given CLI module.

spy.exec(argsStr, [options], [callback])

Executes the CLI with the given arguments and reports the parsed arguments passed to the stub main function.

  • argsStr {String} the string of arguments to execute the CLI with.
  • options {Object} (optional) additional options to pass to child_process.exec. Note: if you specify a different cwd, ensure the pathToCli the spy was initialised with is relative to that cwd.
  • callback {Function} (optional) called back with the result of executing the CLI, unnecessary if using the returned promise.

Returns a Q promise that is resolved with the result of executing the CLI.

The result of executing the CLI (either resolved via promise or returned via callback) includes:

  • stdout any output sent to stdout by the CLI. Note: this will also include the serialised arguments printed by the spy.
  • stderr any output sent to stderr by the CLI.
  • executions array of information on each execution of the stub main function:
    • args JSON representation of the arguments passed

For backwards compatibility, the result also includes the following property:

  • args JSON representation of the arguments passed to the stub main function (of the first execution only).