Home

Awesome

jasmine-html-runner for Node.js

It uses phantomjs to execute your Jasmine's HTML spec runner and fetches the results when the test ends, outputting it on the console and on a jUnit XML.

It also uses httpd-mock to create a mock http server that may be needed for the tests to run successfuly. This way HTTP protocol dependents such as Requirejs and Less work properly. The mock server also allows you to implement services through a simple configuration object.

External dependencies

phantomjs v1.9 (should work with v1.8)

Usage

Configuration file

A JSON file containing the following structure:

{
    "jsonMocksPath": "./mocks/", // default, optional
    "outputFile": "./TEST-Jasmine.xml", // default, blank to bypass file output
    "phantomJsLocation": "/usr/local/bin/phantomjs", // only needed if not available in env path. overridable by command line arg --phantom-js-location
    "quiet": false, // default, if true it won't ouput anything to the console
    "serverRootPath": ".", // default
    "servicesPrefix": "/webservice/", // default, optional
    "testHtmlFile": "tests.html", // default, overridable by command line arg -t
    "timeout": 300000, // default, miliseconds until execution stops if tests didn't end
    "webServices": { // optional
      "get": {
        "YOUR_WEBSERVICE_URI": "WEBSERVICE_JSON_RESULT_FILE.json",
        "YOUR_WEBSERVICE_URI": "WEBSERVICE_JSON_RESULT_FILE.json"
      },
      "post": {
        "YOUR_WEBSERVICE_URI": "WEBSERVICE_JSON_RESULT_FILE.json",
        "YOUR_WEBSERVICE_URI": "WEBSERVICE_JSON_RESULT_FILE.json"
		}
	}
}

The web service URI can contain variables, for instance, "client/:id" would be caught in a request to "client/123".

Configuring your spec runner

No changes are needed to your Jasmine's HTML spec runner, though if you want to have jUnit output you should include the following in your html head:

<head>
  <!-- ... -->
	<script src="jasmine.js"></script>
	<script src="jasmine-html.js"></script>
	<script src="jasmine-junit.js"></script>
  <!-- ... -->
</head>

Remember to set your src paths correctly. You may find a copy of jasmine-junit reporter inside the assets folder within this application.

Also you'll need to add the reporter to your jasmine environment:

jasmine.getEnv().addReporter(new jasmine.JUnitXmlReporter());

Running

As a binary

Usage: jasmine-html-runner.js -c <path> [options]

Options:

    -h, --help                       output usage information
    -V, --version                    output the version number
    --phantom-js-location [path]     Path to the phantomjs binary
    -c, --config <path>              Path to the configuration file relative to jasmine-html-runner
    -t, --test-html-file [filename]  Uri of your Jasmine's html spec runner [tests.html]

As a module

Here's a small example:

var JasmineHtmlRunner = require("jasmine-html-runner");
var jasmineHtmlRunner = new JasmineHtmlRunner({
    configFile: "jasmine-html-runner.json",
    onFinish: function () {
        process.exit();
    }
});
jasmineHtmlRunner.start();

The object received in the constructor can contain any variable available inside the config file. The reason the configFile is mandatory is because of httpd-mock limitation for the time being.

As a Grunt task

To run as a grunt task there's grunt-jasmine-html-runner to do the job for you.

TODO

Acknowledgment

The jUnit XML Reporter was retrieved and changed from larrymyers project jasmine-reporters in order to output the XML content to the console (and then intercepted by phantom).