When writing my node modules, I've come to really quite enjoy using Jest for testing (I've written about how I used tap and it's quite similar).

Sometimes however, being able to execute the module on the command line and passing some arbitrary data can be pretty handy, and I've used the following technique on a growing handful of modules I've written.

UK EVENTAttend ffconf.org 2024

The conference for people who are passionate about the web. 8 amazing speakers with real human interaction and content you can't just read in a blog post or watch on a tiktok!

Exporting to the CLI

I've written a module called bin-to-file. It's an old JS Bin module that takes a bin structure and returns a single HTML string with everything smooshed together.

The module has tests, but I want to be able to quickly test the output using the command line like this:

$ cat __test__/foo.json | node lib/index.js
‣ <html…

In my lib/index.js (the source for the module), right where I'm exporting the function out, my code includes the following lines:

// if the module isn't being required be another module
// and there's something being piped in, then —
if (!module.parent && !process.stdin.isTTY) {
  const stdin = require('fs').readFileSync(0); // 0 = STDIN
  console.log(module.exports(JSON.parse(stdin.toString())));
}

And that's it. Now I can use my module on the command line for arbitrary testing.