SoftwareTesting:Tools:jsUnit
From MozillaWiki
Contents
Description
jsUnit is a fairly mature harness for in-browser testing. We can easily use it to run tests that can run as content
How to run the test
- download jsunit from jsunit.net
- I've had success playing with 2.2a11
- unzip the file
- I didn't do any of the installation stuff for jsUnit Server - I just used the unpacked files as-is
- add your test to the jsunit directory (the one containing testRunner.html)
- load testRunner.html in your browser
- use the file picker to select the test you just wrote
- run the test
Simple Example
dom_3348.html: tagName of HTML element should give tag in upper case (bug 3348)
<HTML> <HEAD> <script language="javascript" src="app/jsUnitCore.js"></script> <script> function test3348() { var oForm = document.getElementById("form1"); assertEquals("FORM", oForm.tagName); } </script> </HEAD> <BODY> <form id="form1"> <input type="button" value="click here" onclick="buttonClick();"> </form> </BODY> </HTML>
Output
the test passes
Example using events
dom_338679.html - DOMAttrModified event should not report new value as prevValue for style changes
- note the use of the setUpPage function, and setting setUpPageStatus to 'complete' when it is ok to run the test assertions
<!DOCTYPE html> <title>Testcase bug 338679</title> <script language="javascript" src="app/jsUnitCore.js"></script> <script> function setUpPage() { with (document.getElementById("out")) { addEventListener("DOMAttrModified", attr_modified, false) style.width = "auto" } } function attr_modified(ev) { this.textContent = "Previous:\t" + ev.prevValue + "\nNew:\t\t" + ev.newValue; setUpPageStatus = 'complete' } function testBug338679() { assertEquals("Previous:\twidth: 20em;\nNew:\t\twidth: auto;",document.getElementById("out").textContent); } </script> <dl> <dt>Actual result:</dt> <dd> <pre id="out" style="width: 20em"> </pre> </dd> <dt>Expected result:</dt> <dd> <pre> Previous: width: 20em; New: width: auto; </pre> </dd> </dl>
Other Examples
- example jsunit-based tests (davel's examples)
Comments
- jsUnit also supports test suites.
- paths for files in addTestPage() are evaluated relative to the testRunner page, not the test suite page
To do list
- resolve how this should be checked in / referenced from the tree
- check in to tree?
- make accessible via resource: or chrome: url?
- package as an extension?
- a wrapper extension that takes as config input the url or directory where the jsunit files live?
- make it easier to detect pass/fail status from an automated invocation harness
- add test runner that reports pass/fail via dump, log, or write to file
- convert, or use as a base, to run tests with chrome privileges
- need to break dependency on running in a browser window - see here for a quick attempt to do so
- convert, use as base, or merge with xpcshell-simple harness?