asciidisco / grunt-qunit-istanbul

Run QUnit unit tests in a headless PhantomJS instance & generate some nice code coverage metrics using Istanbul.
MIT License
33 stars 21 forks source link

grunt-qunit-istanbul

Run QUnit unit tests in a headless PhantomJS instance with code coverage analysis provided by istanbul.

IMPORTANT

This is a fork of the grunt-contrib-qunit repo, adding the ability to generate istanbul test coverage reports. Unfortunately this cannot be handled as a seperate plugin, because it needs to hook into the grunt-contrib-qunit and grunt-lib-phantomjs structure.

This plugin should work as a drop-in replacement for your current qunit task. For any further configuration, please check out the original plugin's repo.

Getting Started

This plugin requires Grunt ~0.4.0.

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile, as well as how to install and use Grunt plugins. Once you're familiar with that process, you can install this plugin with this command:

npm install grunt-qunit-istanbul --save-dev

Once the plugin has been installed, it can be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-qunit-istanbul');

QUnit task

Run this task with the grunt qunit command.

Task targets, files and options may be specified according to the grunt Configuring tasks guide.

When installed by npm, this plugin will automatically download and install PhantomJS locally via the grunt-lib-phantomjs-istanbul library.

Also note that running grunt with the --debug flag will output a lot of PhantomJS-specific debugging information. This can be very helpful in seeing what actual URIs are being requested and received by PhantomJS.

OS Dependencies

This plugin uses PhantomJS to run tests. PhantomJS requires the following dependencies:

On Ubuntu/Debian

apt-get install libfontconfig1 fontconfig libfontconfig1-dev libfreetype6-dev

On CentOS

yum install fontconfig freetype

Options (Coverage object)

src

The js files you would like to end up in the coverage report.

instrumentedFiles

A temporary folder (that will be automatically generated and deleted after the test suite finishes) containing the instrumented source code.

tempDir

A folder where the temporary coverage data files should be stored.

reportOnFail

Whether to generate coverage report, when a test fails. By default, on test failure, the coverage report is not generated.

htmlReport

A folder where the HTML reports should be stored.

jsonReport

A folder where the JSON reports should be stored.

jsonSummaryReport

A folder where the JSON summary reports should be stored.

coberturaReport

A folder where the Cobertura reports should be stored.

lcovReport

A folder where the LCOV reports should be stored.

cloverReport

A folder where the Clover reports should be stored.

prefixUrl

If you're running your qunit tests with the help of a webserver, and there is a path that precedes the file system path of the assets.

Example:

// File system: './javascripts/index.js'
// Webserver url: 'localhost:8080/assets/my-project/javascripts/index.js'

{
  baseUrl: '../', // Go up one level to `my-project`
  prefixUrl: 'assets/' // Prefix used before the file path on the web url
}

baseUrl

If you're running your qunit tests with the help of a webserver, you have to point the coverage inspector to the physical path that is the base url of the qunit page you're running.

linesThresholdPct

Lines coverage percentage threshold to evaluate when running the build. If the actual coverage percentage is less than this value, the build will fail.

statementsThresholdPct

Statements coverage percentage threshold to evaluate when running the build. If the actual coverage percentage is less than this value, the build will fail.

functionsThresholdPct

Functions coverage percentage threshold to evaluate when running the build. If the actual coverage percentage is less than this value, the build will fail.

branchesThresholdPct

Branches coverage percentage threshold to evaluate when running the build. If the actual coverage percentage is less than this value, the build will fail.

disposeCollector

Whether or not to dispose the previous collector and create a new instance of it, discarding the info of previously instrumented files. This is useful if using grunt-qunit-istanbul as a multi task with separate targets generating separate coverage reports. If set to true for a particular target, the plugin will generate a coverage report only for the files specified in the coverage.src property, even when files used by the current target were also instrumented by a previous target. See the related bug report.

Usage

qunit: {
  options: {
    '--web-security': 'no',
    coverage: {
      disposeCollector: true,
      src: ['src/js/**/*.js'],
      instrumentedFiles: 'temp/',
      htmlReport: 'report/coverage',
      coberturaReport: 'report/',
      linesThresholdPct: 85
    }
  },
  all: ['test/**/*.html']
}

Original Task by "Cowboy" Ben Alman

Modified by asciidisco