-
Notifications
You must be signed in to change notification settings - Fork 5
QA Tests and Continuous Integration
We have implemented a couple of very simple tests based on Mocha in order to start and test continuous integration.
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:
- mongodbThird, 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"
},We need:
- Unit testing of nodeJS api endPoints with code coverage,
- Unit testing of Javascript client scripts on many browsers with code coverage,
- 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. 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:
"scripts": {
"start": "node server.js",
"test": "grunt test"
},Unit testing of server api endPoints with code coverage requires:
To install Grunt, open a nodeJS terminal prompt and execute the following commands:
npm install -g grunt-cli
npm install grunt --save-devInstall 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-devThen 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-cafe-mocha');
// Default task(s).
grunt.registerTask('test', ['env:test', 'cafemocha: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-cliNow our tests are triggered by Grunt on Travis, allowing for more complexity.
Ideally we want a test framework and an assert library which we can run for unit tests and for functional tests both on nodejs and in browsers. The combination of Mocha and Chai fits this requirement. Let us install requirements including grunt:
npm install -g grunt-cli
mpm install mocha
npm install 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
- OpenSauce (from SauceLab) based on Selenium
- BrowserStack, also based on Selenium
- CodeSwarm (formerly BrowserSwarm)
- http://www.modern.ie/en-us/virtualization-tools#downloads
- https://ci.testling.com
###Code Coverage
Copyright © 2013-2014 Memba Sarl. All rights reserved.