Documentation

QUnit

From jQuery JavaScript Library

Jump to: navigation, search

Contents

About

QUnit is the unit testrunner for the jQuery project. It got promoted to a top-level project in May 2008 to make it easier to use in other projects, with focus on jQuery UI. Every plugin developer can leverage the testsuite to unit test their code.

It's especially useful for regression testing: Whenever a bug is reported, write a test that asserts the existence of that particular bug. Then fix it and commit both. Every time you work on the code again, run the tests. If the bug comes up again - a regression - you'll spot it immediately and know how to fix it, because you know what code you just changed.

Having good unit test coverage makes safe refactoring easy and cheap. You can run the tests after each small refactoring step and always know what change broke something.

Status

The core QUnit features are extremely stable. The overall API is still a work-in-progress, with some legacy assertions slowly being replaced by more generic methods. There is no stable release, just files in a subversion repository. This should change till then end of 2008.

Contact

QUnit is maintained by Jörn Zaefferer.

Please post to the jQuery development list (see Discussion) for anything related to QUnit (put QUnit into the subject of your mail).

Using QUnit

To use QUnit, you have to include its js and css files and provide a basic HTML structure for displaying the test results:

Basic usage examples

test("a basic test example", function() {
  ok( true, "this test is fine" );
  var value = "hello";
  equals( "hello", value, "We expect value to be hello" );
});

module("Module A");

test("first test within module", function() {
  ok( true, "all pass" );
});

test("second test within module", function() {
  ok( true, "all pass" );
});

module("Module B");

test("some other test", function() {
  expect(1);
  ok( true, "well" );
});

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <link rel="stylesheet" href="http://dev.jquery.com/view/trunk/qunit/testsuite.css" type="text/css" media="screen" />

  <script>
  $(document).ready(function(){
    
test("a basic test example", function() {
  ok( true, "this test is fine" );
  var value = "hello";
  equals( "hello", value, "We expect value to be hello" );
});

module("Module A");

test("first test within module", function() {
  ok( true, "all pass" );
});

test("second test within module", function() {
  ok( true, "all pass" );
});

module("Module B");

test("some other test", function() {
  expect(1);
  ok( true, "well" );
});

  });
  </script>
  
</head>
<body>
  
<script type="text/javascript" src="http://jqueryjs.googlecode.com/svn/trunk/qunit/testrunner.js"></script>
 <h1>QUnit example</h1>
 <h2 id="banner"></h2>
 <h2 id="userAgent"></h2>

 <ol id="tests"></ol>

 <div id="main"></div>
 
</body>
</html>

API documentation

NameType
Setup:





NameType
test( name, test )
Add a test to run.
module( name, lifecycle )
Seperate tests into modules.
Assertions:








NameType
ok( state, message )
A boolean assertion, equivalent to JUnit's assertTrue.
equals( actual, expected, message )
A comparison assertion, equivalent to JUnit's assertEquals.
same( actual, expected, message )
A deep recursive comparison assertion, working on primitive types, arrays and objects.
expect( amount )
Specify how many assertions are expected to run within a test.
Testing Ajax:



NameType
start( )
Start running tests again after the testrunner was stopped. See stop().
stop( timeout )
Stop the testrunner to wait to async tests to run. Call start() to continue.

more coming soon

Integration into Browser Automation Tools

To integrate QUnit into browser automation tools, those doing the work of launching various browsers and gathering the results, QUnit provides a simple microformat for its test result.

 <p class="result" id="testresult">
   Tests completed in 16797 milliseconds.<br/>
   <span class="bad">0</span> tests of <span class="all">565</span> failed.
 </p>

Using jQuery, you can read the result:

var r = jQuery("#testresults")
var bad = r.find(".bad").text();
var all = r.find(".all").text();
console.log(bad + " of " + all + " failed.")

Suggestions for better integration are welcome!

Reference testsuites

jQuery itself has the biggest set of tests using QUnit:

The validation plugin got a decent test coverage, too:

Two examples from the jQuery UI project: