-
Notifications
You must be signed in to change notification settings - Fork 778
Description
I'm not sure if this behavior is by-design, or if there's just no way for QUnit to fix it, but this situation just bit me and it was very confusing.
Here's my minimal test case:
"use strict";
var QUnit = require("qunit");
QUnit.done(function done(results) {
console.log("done:",results);
});
QUnit.test("temp",function(assert){
var done = assert.async();
assert.expect(1);
setTimeout(function(){
console.log("timer!");
},1000);
});
QUnit.test( "temp2", function(assert){
assert.expect(1);
assert.ok(true,"temp2");
});
QUnit.start();And when I run this:
$] node tmp.js
timer!
$]
In other words, the first test case fires the timer, but since it never runs the done(), it just silently dies. Since node doesn't have any other waiting event handlers, node just exits. The test suite doesn't fire my completion handler to notify me that a test failed to meet its assertion, and it doesn't try to run the second test at all. It just stops.
And even worse, the test suite exits with a zero exit code, meaning my other CLI tools consider this a passing test suite run. :(
This seems like broken behavior to me. Shouldn't there be some sort of timeout in the background for async tests, or something like that?
Or maybe qunit could register a process.on("exit", ..) handler, that if the test suite hasn't completed by the time the process tries to finish, the handler forces a non-zero exit code to signal failure to the CLI, and emits some error about an abnormally terminated test suite?