Home

Awesome

jasmine-node

LICENSE npm contributors

This node.js module makes the wonderful Pivotal Lab's jasmine spec framework (version 1) available in node.js.

Project status

This project is now in maintenance mode. It is recommended to use the jasmine or jasmine-npm package whenever possible.

jasmine

Version 1.3.1 of Jasmine is currently included with node-jasmine. This is a forked version from the Karma project, which allows you to use the ddescribe and iit functions to run individual suites or specs.

NOTICE: BETA 2.0.0 Support in the Jasmine2.0 branch (with rewrite in CoffeeScript) is now abandoned and no longer supported.

Supported Node.js versions

Older versions of Node.js are no longer supported. It is highly recommended to upgrade to a supported version of Node.js.

what's new

install

To install the latest official version, use NPM:

npm install jasmine-node -g

To install the latest bleeding edge version, clone this repository and check out the beta branch.

usage

Write the specifications for your code in *.js and *.coffee files in the spec/ directory. You can use sub-directories to better organise your specs. In the specs use describe(), it() etc. exactly as you would in client-side jasmine specs.

Note: your specification files must be named as *spec.js, *spec.coffee or *spec.litcoffee, which matches the regular expression /spec\.(js|coffee|litcoffee)$/i; otherwise jasmine-node won't find them! For example, sampleSpecs.js is wrong, sampleSpec.js is right.

If you have installed the npm package, you can run it with:

jasmine-node spec/

If you aren't using npm, you should add pwd/lib to the $NODE_PATH environment variable, then run:

node lib/jasmine-node/cli.js

You can supply the following arguments:

Individual files to test can be added as bare arguments to the end of the args.

Example:

jasmine-node --coffee spec/AsyncSpec.coffee spec/CoffeeSpec.coffee spec/SampleSpec.js

async tests

jasmine-node includes an alternate syntax for writing asynchronous tests. Accepting a done callback in the specification will trigger jasmine-node to run the test asynchronously waiting until the done() callback is called.

var request = require('request');

it("should respond with hello world", function(done) {
  request("http://localhost:3000/hello", function(error, response, body){
    expect(body).toEqual("hello world");
    done();
  });
});

An asynchronous test will fail after 5000 ms if done() is not called. This timeout can be changed by setting jasmine.getEnv().defaultTimeoutInterval or by passing a timeout interval in the specification.

var request = require('request');

it("should respond with hello world", function(done) {
  request("http://localhost:3000/hello", function(error, response, body){
    done();
  });
}, 250); // timeout after 250 ms

or

var request = require('request');

jasmine.getEnv().defaultTimeoutInterval = 500;

it("should respond with hello world", function(done) {
  request("http://localhost:3000/hello", function(error, response, body){
    done();
  });  // timeout after 500 ms
});

Checkout spec/SampleSpecs.js to see how to use it.

requirejs

There is a sample project in /spec-requirejs. It is comprised of:

  1. requirejs-setup.js, this pulls in our wrapper template (next)
  2. requirejs-wrapper-template, this builds up requirejs settings
  3. requirejs.sut.js, this is a __SU__bject To __T__est, something required by requirejs
  4. requirejs.spec.js, the actual jasmine spec for testing

To run it:

node lib/jasmine-node/cli.js --runWithRequireJs --requireJsSetup ./spec-requirejs/requirejs-setup.js ./spec-requirejs/

exceptions

Often you'll want to capture an uncaught exception and log it to the console, this is accomplished by using the --captureExceptions flag. Exceptions will be reported to the console, but jasmine-node will attempt to recover and continue. It was decided to not change the current functionality until 2.0. So, until then, jasmine-node will still return 0 and continue on without this flag.

Scenario

You require a module, but it doesn't exist, ie require('Q') instead of require('q'). Jasmine-Node reports the error to the console, but carries on and returns 0. This messes up Travis-CI because you need it to return a non-zero status while doing CI tests.

Mitigation

Before --captureExceptions

> jasmine-node --coffee spec
> echo $status
0

Run jasmine node with the --captureExceptions flag.

> jasmine-node --coffee --captureExceptions spec
> echo $status
1

growl notifications

Jasmine node can display Growl notifications of test run summaries in addition to other reports. Growl must be installed separately, see node-growl for platform-specific instructions. Pass the --growl flag to enable the notifications.

development

Install the dependent packages by running:

npm install

Run the specs before you send your pull request:

specs.sh

Note: Some tests are designed to fail in the specs.sh. After each of the individual runs completes, there is a line that lists what the expected Pass/Assert/Fail count should be. If you add/remove/edit tests, please be sure to update this with your PR.

changelog