1.5.0 • Public • Published


Evaluate javascript in PhantomJS, and print the output.

Build Status npm install

Inspired by jsdom-eval, this module makes it trivial to run tests in a headless browser.


npm install -g ghostface will expose the ghostface command in your environment.

ghostface does not include phantomjs as a dependency; you should install that however works best in your environment, and ghostface will find it so long as it exists in your $PATH.

ghostface supports phantomjs versions ^1.9.0 or ^2.0.0.


Imagine a browserify project that you're testing using tape:

// file: test.js
var test = require('tape')
test('always passes', function(t) {

Run it with ghostface:

$ browserify test.js | ghostface | faucet

See the output printed to the console:

✓ always passes
# tests 1
# pass  1
✓ ok

Note: In the example above, we pipe output to faucet, which parses TAP output and sets the correct exit codes; ghostface is just evaluating javascript, it doesn't know/care what the output is, or how to set the correct exit codes.


$ ghostface --help

Usage: ghostface [options] [file]

file    Javascript file to be evaluated

  -h --html            The HTML file to be used as the page template
  -t --timeout         Milliseconds to wait for output before stopping execution. Default 1000
  -f --forever         Ignore the timeout and wait forever
  -p --phantomPath     Specify the path to the phantomjs executable
  --help               Show this message
  --version            Print version and quit

You can specify the JS file to be evaluated, or pipe a JS file directly into ghostface. For an imaginary file.js in the current directory, these two commands are equivalent:

$ ghostface file.js
$ cat file.js | ghostface

The JS you are evaluating will be done in a blank web page. If you want to provide your own context, use the --html <filename> option to load your own html; the JS will be evaluated after the page loads.

By default, execution is stopped if no console output is seen for over 1000ms. You can override this timeout with --timeout <ms>, or choose to run forever with --forever. Note you will have to send a SIGHUP to end execution.


This project is licensed under the Apache License, Version 2.0. See LICENSE for the full license.

Package Sidebar


npm i ghostface

Weekly Downloads






Last publish


  • fardog