Project Description

QNUnit offers a number of tools for running QUnit javascript tests (http://docs.jquery.com/Qunit) as part of a continuous integration (CI) process. The library currently supports logging to console and to the Teamcity script console.

Upcoming Features

- The ability to kick off QUnit tests from an NUnit test


Teamcity Quick Start

0. Drop the contents of the QNUnit.Console "bin" folder into a single directory which can be accessed by Visual Studio. A typical location would be under the "lib" or "dependencies" folder of your project.

1. Edit QNUnit.Console.exe.config to provide:

2. Add QNUnit.Console.exe as post-build step to your QUnit tests project. Navigate to: Project Properties -> Build Events. Enter the following in the "Post-build event command line" box:

[Path to QNUnit.Console.exe] $(SolutionDir)[Tests directory]

An example of a command would be:

$(SolutionDir)Dependencies\QNUnit\QNUnit.Console.exe $(SolutionDir)\Project.QUnit\Tests

3. Start Teamcity Build Agent as a standalone console rather than as a service. QNUnit uses the Watin library (http://watin.sourceforge.net/) for opening browsers and Teamcity has trouble doing that in service mode. (see http://stackoverflow.com/questions/488443/running-watin-on-teamcity) Use the following command to start the agent console:

[Teamcity root]\bin\agent.bat start

4. Commit your changes and have Teamcity build the solution. You should start seeing QUnit test results!

 

QUnit Standalone Test Example

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Basic Qunit Test</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
    <script type="text/javascript" src="http://github.com/jquery/qunit/raw/master/qunit/qunit.js"></script>
    <link rel="Stylesheet" type="text/css" href="http://github.com/jquery/qunit/raw/master/qunit/qunit.css" />

    <script type="text/javascript">
        $(function () {
            test("a basic test example", function () {
                ok(false, "this test is not fine");
                var value = "hello";
                equals("hello", value, "We expect value to be hello");
            });

            module("Module A");

            test("first failed test", function () {
                equals("not the same", "same", "Expected value to be 'same'");
                equals("ok", "ok", "Expected value to be 'ok'");
                same(1, 3);
            });
        });
    </script>
</head>
<body>
    <div id="test-group-name">Basic QUnit Test</div>
    <h1 id="qunit-header">
        QUnit example</h1>
    <h2 id="qunit-banner">
    </h2>
    <h2 id="qunit-userAgent">
    </h2>
    <ol id="qunit-tests">
    </ol>
</body>
</html>