As part of my experimenting with JS Test Driver, I have been porting over a suite of about 300 existing tests.
Some of these tests deal with time based logic, such as delayed callbacks or time limited user interaction. Currently these tests are run in a HTML page using qunit.
To deal with the time based logic I use the jsUnit’s Mock Timeout. See Simulating Time in jsUnit Tests on the Google Testing Blog.
jsUnit’s Mock Timeout overrides the built in
clearInterval methods, and provides a
Clock object that allows you to control the passage of time.
This works fine in qunit, but it fails catastrophically in JS Test Driver. This is because JS Test Driver uses the
setInterval methods to control it’s own behaviour. Once these have been overridden with the mock versions JS Test Driver no longer works.
As a temporary fix for this I have created a patched version of JS Test Driver, which creates it’s own copies of the original
clearInterval methods, before loading any code. This ensures it works well with the jsUnit Mock Timeout.
Patched JS Test Driver
Just use this jar in place of the original
JsTestDriver-1.0b.jar, and you can include
jsUnitMockTimeout.js in your tests without breaking JS Test Driver!
You may also want to download jsUnitMockTimeout.js (to save you finding it within the jsUnit source).
I see this patched JS Test Driver as very much a temporary stepping stone, while the correct solution is worked out. Beware of relying on it too heavily!