Using Jasmine with node

The Jasmine node package contains helper code for developing and running Jasmine tests for node-based projects. Jasmine 3.x supports Node versions 10, 12, and 14. (Odd-numbered Node versions aren’t supported, but will probably work.)

Install

You can install Jasmine using npm locally in your project:

npm install --save-dev jasmine

With the above local installation you can invoke the CLI tool using npx jasmine ... commands.

Optionally you can also install jasmine globally so that you can invoke the CLI tool using jasmine ... commands.

npm install -g jasmine

Init a Project

Initialize a project for Jasmine by creating a spec directory and configuration json for you.

jasmine init

Note that if you installed Jasmine locally use npx jasmine instead of jasmine in any of these examples, like so:

npx jasmine init

Generate examples

Generate example spec and source files

jasmine examples

At this point you should be able to write your first suite

Configuration

Customize spec/support/jasmine.json to enumerate the source files and spec files you would like the Jasmine runner to include. You may use dir glob strings.

Paths starting with ! are excluded, for example !**/*nospec.js.

spec_dir is used as a prefix for all spec_files and helpers. Helpers are executed before specs. For an example of some helpers see the react tutorial

{
  // Spec directory path relative to the current working dir when jasmine is executed.
  "spec_dir": "spec",

  // Array of filepaths (and globs) relative to spec_dir to include and exclude
  "spec_files": [
    "**/*[sS]pec.js",
    "!**/*nospec.js"
  ],

  // Array of filepaths (and globs) relative to spec_dir to include before jasmine specs
  "helpers": [
    "helpers/**/*.js"
  ],

  // Stop execution of a spec after the first expectation failure in it
  "stopSpecOnExpectationFailure": false,

  // Run specs in semi-random order
  "random": false
}

Running tests

Once you have set up your jasmine.json, you can execute all your specs by running jasmine from the root of your project (or npx jasmine if you had installed it locally).

If you want to just run one spec or only those whom file names match a certain glob pattern you can do it like this:

jasmine spec/appSpec.js
jasmine "**/model/**/critical/**/*Spec.js"

Using ES modules

If the name of a spec file or helper file ends in .mjs, Jasmine will load it as an ES module rather than a CommonJS module. This allows the spec file or helper to import other ES modules. No extra configuration is required. Note that Jasmine does not currently take advantage of the type field in package.json, so spec and helper files ending in .js will be loaded as CommonJS modules even if "type": "module" is set in package.json.

CLI Options

JASMINE_CONFIG_PATH=

Specify a relative or absolute path to your configuration file. Can be used as an option or set as an environment variable.

JASMINE_CONFIG_PATH=spec/config/jasmine.json jasmine

jasmine --config=spec/config/jasmine.json

--no-color

Turns off color in spec output

jasmine --no-color

--filter=

Only runs specs that match the given string

jasmine --filter="a spec name"

--stop-on-failure=[true|false]

Stops execution of a spec after the first expectation failure when set to true

jasmine --stop-on-failure=true

--random=[true|false]

Tells jasmine to run specs in semi random order or not for this run, overriding jasmine.json

jasmine --random=true

--seed=

Sets the randomization seed if randomization is turned on

jasmine --seed=4321

--reporter=

Sets the reporter default reporter implementation. Must be a valid node.js module name and needs installed in your project. If Jasmine-npm cannot load it it will use the default one.

npm i --save-dev jasmine-ts-console-reporter
jasmine --reporter=jasmine-ts-console-reporter

Using the library

If you want more granular control over the configuration, Jasmine can also be used as a library in your project. This allows you to load multiple config files or control your configuration in different ways.

var Jasmine = require('jasmine');
var jasmine = new Jasmine();

Load configuration from a file or from an object.

jasmine.loadConfigFile('spec/support/jasmine.json');

jasmine.loadConfig({
    spec_dir: 'spec',
    spec_files: [
        'appSpec.js',
        'requests/**/*[sS]pec.js',
        'utils/**/*[sS]pec.js'
    ],
    helpers: [
        'helpers/**/*.js'
    ]
});

Custom onComplete

Optionally specify a custom onComplete callback. The callback is given a boolean of whether all of the specs passed or not. This is often used to message a status to task runners like grunt.

jasmine.onComplete(function(passed) {
    if(passed) {
        console.log('All specs have passed');
    }
    else {
        console.log('At least one spec has failed');
    }
});

Reporters

A ConsoleReporter is included if no other reporters are added. You can configure the default reporter with configureDefaultReporter. The default values are shown in the example.

jasmine.configureDefaultReporter({
    // The `timer` passed to the reporter will determine the mechanism for seeing how long the suite takes to run.
    timer: new jasmine.jasmine.Timer(),
    // The `print` function passed the reporter will be called to print its results.
    print: function() {
        process.stdout.write(arguments);
    },
    // `showColors` determines whether or not the reporter should use ANSI color codes.
    showColors: true
});

You can add a custom reporter with addReporter. If you add a reporter through addReporter, the default ConsoleReporter will not be added. Multiple reporters can be added.

var CustomReporter = require('./myCustomReporter');
var customReporter = new CustomReporter();

jasmine.addReporter(customReporter);

Run the tests

Calling execute will run the specs.

jasmine.execute();

execute can optionally be called with a list of spec file paths to execute relative to your project root and a string to filter by spec name.

jasmine.execute(['fooSpec.js'], 'a spec name');

A simple example using the library

var Jasmine = require('jasmine');
var jasmine = new Jasmine();

jasmine.loadConfigFile('spec/support/jasmine.json');
jasmine.configureDefaultReporter({
    showColors: false
});
jasmine.execute();