Testing JavaScript projects with Grunt, Jasmine, and JSHint

I maintain jasmine-jquery, a library providing jquery matchers and fixture loading for jasmine. Recently, I setup jasmine-jquery with grunt, a javascript task runner. This way, I can run the test suite from the command-line, and have continuous integration with travis-ci — so collaborators know when they broke something. In the process of setting all this up, I learned about grunt, and using grunt with jshint and jasmine.

To use grunt with jamine, jshint, and travis-ci, you need four files: package.json, Gruntfile.js, .jshintrc, and .travis.yml.

First, you need a package.json file in the root of your project. That’ll look like:

  , ...
  , "scripts": { "test": "grunt test" }
  , "devDependencies": {
      "grunt": "~0.4.1"
    , "grunt-contrib-jshint": "~0.6.0"
    , "grunt-contrib-jasmine": "~0.4.0"

travis-ci runs npm test, and now npm test will run grunt test.

For grunt, you need a Gruntfile.js:

/* jshint node: true */

module.exports = function (grunt) {
  "use strict";

      pkg: grunt.file.readJSON('package.json')
    , jshint: {
        all: [
          , "lib/**/*.js"
          , "spec/**/*.js"
      , options: {
          jshintrc: '.jshintrc'
    , jasmine: {
        src: "lib/**/*.js"
      , options: {
          specs: "spec/**/*.js"
        , vendor: "vendor/**/*.js"


  grunt.registerTask('test', ['jshint', 'jasmine'])
  grunt.registerTask('default', ['test'])

See grunt-contrib-jasmine’s README for the available options you can set.

grunt test runs our test task, this checks the code’s quality with jshint, then runs the tests with jasmine. jasmine-jquery’s .jshintrc.

To setup travis-ci, you need a .travis.yml file:

language: node_js
  - 0.8
  - npm install -g grunt-cli

Integrate travis-ci with your project on GitHub.