Intern Logo

One of Intern’s goals has always been to make writing high-quality tests easier, but running those tests hasn’t always been straightforward. Now there‘s a new way to run Intern tests — intern-cli. This package provides an intern command that has a POSIX-like interface, using familiar flags and options like --help. It follows some conventions that make running Intern simpler, and provides plenty of inline help. It even makes getting started with Intern easier with a new init command.

First things first — you can install intern-cli using npm:

$ npm install -g intern-cli

Note that unlike a normal Intern install, we’re installing intern-cli globally. This is similar to how other popular npm-based dev tools work; the command-line interface is installed globally, and the tool itself will be installed in a project.

Now to try it out!

$ cd ~/tmp/new_project
$ intern

You'll need a local install of Intern before you can use this command.
Install it with

  npm install --save-dev intern

$

Ok, we weren’t quite ready yet. Intern must be locally installed in a project before you can use intern-cli.

$ npm install --save-dev intern
...
$ intern

  Usage: intern [options] [command]

  Run JavaScript tests

  Commands:

    init [options]    Setup a project for testing with Intern
    run [options]     Run tests in Node or in a browser using WebDriver
    serve [options]   Start a simple web server for running unit tests in a browser on your system

  Options:

    -h, --help     output usage information
    -v, --verbose  show more information about what Intern is doing
    -V, --version  output the version
    --debug        enable the Node debugger

Better! With no options or commands, intern-cli displays its top-level help menu. It provides three commands: init, run, and serve. The run command is just a convenience for running Intern’s Node.js client or WebDriver runner (intern-client and intern-runner). The init and serve commands are new, though.

The init command bootstraps a testing environment for a project. It creates a tests/ directory and populates it with a default test config and example functional and unit tests.

$ intern init

  Intern initialized! A test directory containing example unit and functional
  tests has been created at tests/. See tests/intern.js for configuration options.

  Run the sample unit test with `intern run`.

  To run the sample functional test, first start a WebDriver server (e.g.,
  Selenium), then run `intern run -w`. The functional tests assume chrome is
  installed.

  Note that running WebDriver tests with Chrome requires ChromeDriver to be
  available in the system path. See

    https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver

  for more information.

$ tree tests
tests
??? functional
?   ??? hello.js
?   ??? page.html
??? intern.js
??? unit
    ??? hello.js

At this point we can actually run tests. To do that, use the run command. By default this command will use Intern’s Node.js client. While intern-client and intern-runner require that a test config be specified, intern assumes the test config is at tests/intern.js, so a simple intern run command will suffice:

$ intern run
PASS: hello - hello world (1ms)
0/1 tests failed
0/1 tests failed

That was neat, but what about tests that need a browser? One option is to use Intern’s WebDriver runner by passing a “-w” option to the run command. Assuming a Selenium server is running and Intern is configured to use it, this will tell Intern to start a browser and run unit and functional tests. However, intern-cli provides another option for running unit tests in a browser with its serve command.

Simply running intern serve will start Intern’s test proxy server, which is basically a static web server with some additional functionality, and display a URL that you can open in a browser to run unit tests using Intern’s browser client.

Listening on 0.0.0.0:9000

  To run unit tests, browse to:

    node_modules/intern/client.html?config=tests/intern.js

  Press CTRL-C to stop serving.

The serve command also accepts a -o option. When this option is provided, intern-cli will open the default system browser automatically after the server starts. This makes running browser-based unit tests as easy as running tests in the Node.js client.

The initial version of intern-cli was sponsored by Ai Squared. If you or your company find Intern or intern-cli useful, consider supporting ongoing development of these tools with a similar sponsorship to add features and fixes you’d like to see! Just send us an email letting us know of your interest and we’ll set up a call to talk you through the process and what you can expect.