Task automation with Grunt
Grunt is a task runner and a great way to automate your node projects. Let's add a simple grunt script to our project in order to automate running tests and code coverage. Let's install Grunt and Grunt CLI:
npm install -g grunt-cli npm install grunt –-save-dev
The grunt-cafe-mocha
is a grunt module for running mocha; this module will also allow us to automate code coverage reports:
npm install grunt-cafe-mocha –-save-dev
The grunt-jscoverage
simply generates an instrumented version of our source code and writes it to ./lib-cov
:
npm install grunt-jscoverage –-save-dev
The grunt-env
allows you to set the current node environment, NODE_ENV
:
npm install grunt-env –-save-dev
Let's create a grunt file ./gruntfile.js
. We load the grunt
modules we just installed, and grunt.initConfig
contains a configuration for each grunt module:
module.exports = function(grunt) { grunt.loadNpmTasks('grunt-jscoverage'); grunt.loadNpmTasks('grunt-cafe-mocha'); grunt.loadNpmTasks('grunt-env'); grunt.initConfig({ env: { test: { NODE_ENV: 'TEST' }, coverage: { NODE_ENV: 'COVERAGE' } }, cafemocha: { test: { src: 'test/*.js', options: { ui: 'bdd', reporter: 'spec', }, }, coverage: { src: 'test/*.js', options: { ui: 'bdd', reporter: 'html-cov', coverage: { output: 'coverage.html' } } }, }, jscoverage: { options: { inputDirectory: 'lib', outputDirectory: 'lib-cov', highlight: false } } }); grunt.registerTask('test', [ 'env:test', 'cafemocha:test' ]); grunt.registerTask('coverage', [ 'env:coverage', 'jscoverage', 'cafemocha:coverage' ]); };
The configuration for cafemocha
contains two sections; one for running our tests and one for generating a code coverage report. In order to run our tests from grunt, execute the following command:
grunt test
The following line registers a task that sets the environment using env
and runs both the jscoverage
and cafemocha:coverage
tasks in sequence:
grunt.registerTask('coverage', [ 'env:coverage', 'jscoverage', 'cafemocha:coverage' ]);
In order to run our coverage from grunt, execute the following command:
grunt coverage
This command will generate the coverage report as described earlier.