Skip to content
This repository was archived by the owner on Apr 22, 2021. It is now read-only.

QA Tests and Continuous Integration

jlchereau edited this page May 20, 2014 · 33 revisions

Simple QA/Tests for Continuous Integration

Mocha and Supertest

We have implemented a couple of very simple tests based on Mocha in order to start and test continuous integration.

Travis-CI

Continuous integration for nodeJS with Travis-CI is documented.

Note: for our records, the equivalent of Travis-CI in the .NET world would be AppVeyor

First, sign up to Travis-CI with your GitHub account and enable the repository you need to track for continuous integration. If organization repositories are not listed, go to the organization members list and make your membership public.

Second, add a text file named .travis.yml at the root of the repository with the following content:

language: node_js
node_js:
  - "0.11"
  - "0.10"
services:
  - mongodb

Third, make sure you have a test command by calling npm test in a terminal session. This actually refers to the scripts object in package.json:

"scripts": {
    "start": "node server.js",
    "test": "mocha"
},

Finally, all npm package modules need to be installed locally. If you have installed mocha globally to benefit from the command line, you need to duplicate it locally in package.json so as to be installed by Travis-CI using npm install:

"devDependencies": {
    "mocha": "^1.18.2",
    "supertest": "^0.12.1"
},

Advanced QA/Tests and Code Coverage

We need:

  1. Unit testing of nodeJS api endPoints with code coverage,
  2. Unit testing of Javascript client scripts on many browsers with code coverage,
  3. Functional (UI) testing (possibly in a headless browser).

The combination of Mocha and Chai fits these requirements on NodeJS servers and in browsers.

We also need to run these tests locally (with code coverage) and on Travis-CI (without code coverage). Considering there are multiple test tasks, we need to run them with Grunt and configure package.json so that the npm test command actually launches grunt test (see below).

Unit testing of server api endPoints with code coverage

First Mocha and Chai need to be installed:

npm install -g mocha
npm install mocha --save-dev
npm install chai --save-dev

To install Grunt, open a nodeJS terminal prompt and execute the following commands:

npm install -g grunt-cli
npm install grunt --save-dev

Install with the following commands the Grunt tasks required to execute mocha test cases:

npm install grunt-env --save-dev
npm install grunt-mocha-test --save-dev

Then create a javascript file named Gruntfile.js at the project root, with the following content:

module.exports = function(grunt) {

    // Project configuration.
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        env: {
            test: { NODE_ENV: 'test' }
        },
        mochaTest: {
            test: {
                src: 'test/*.js',
                options: {
                    ui: 'bdd',
                    reporter: 'spec'
                }
            }
        }
    });

    // Load NpmTasks
    grunt.loadNpmTasks('grunt-env');
    grunt.loadNpmTasks('grunt-mocha-test');

    // Default task(s).
    grunt.registerTask('test', ['env:test', 'mochaTest:test']);

}

At this stage, check that you can successfully run grunt test in a nodeJS terminal prompt and modify package.json so that npm test actually executes grunt test:

"scripts": {
    "start": "node server.js",
    "test": "grunt test"
},

Following this configuration, Travis-CI builds fail with error sh: 1: grunt: not found. The solution consists in modifying .travis.yml as follows:

language: node_js
node_js:
  - "0.11"
  - "0.10"
services:
  - mongodb
before_script:
  - npm install -g grunt-cli

Now our tests are triggered by Grunt on Travis, allowing for more complexity.

Unit testing of Javascript client scripts on many browsers with code coverage

Functional (UI) testing (possibly in a headless browser)

Then we need tests which we can run in browsers:

https://nicolas.perriault.net/code/2013/testing-frontend-javascript-code-using-mocha-chai-and-sinon/ http://pixelhunter.me/post/54753803233/end-to-end-testing-with-zombie-js-mocha-js-and http://robdodson.me/blog/2012/05/27/testing-backbone-boilerplate-with-mocha-and-chai/

###Functional (UI) Testing

###Code Coverage

Clone this wiki locally