在 IE9 中执行 QUnit 测试时,我遇到了一个非常奇怪的问题。测试结构是这样的:
function setupTest() {
// Adding some extra items to the DOM
}
function teardownTest() {
// Removing dirtied items from the DOM
}
module("MODULE A", {setup: setupTest, teardown: teardownTest});
test("TEST 1", function () {
// Some simple assertions
});
module("MODULE B", {setup: setupTest, teardown: teardownTest});
test("TEST 2", function () {
// Some simple assertions
});
这些测试大约有 50% 的时间会失败。我已确保测试完全独立,并且在测试运行之前/之后安装/拆卸完全完成。问题归结为设置回调有一半的时间被乱序调用。通过日志记录,我可以看到这种情况:
成功运行:
LOG: completing setup
LOG: MODULE A: TEST 1
LOG: completing teardown
LOG: completing setup
LOG: MODULE B: TEST 2
LOG: completing teardown
运行失败:
LOG: completing setup
LOG: completing setup <-- ?
LOG: MODULE B: TEST 2
LOG: completing teardown
LOG: MODULE A: TEST 1
LOG: completing teardown
正如您在不成功的运行中看到的那样,设置回调正确执行了两次,但在执行任何一个测试之前。由于 teardown 删除了所需的 DOM 元素,因此第二个执行的测试必然会失败,因为它的设置被调用得太早,并且第一个执行测试(正确地)通过它的 teardown 将其撕掉了。
当第二个测试在第一个测试之前执行时,总是会出现这个问题,但我看不出这会导致问题的原因。该问题从未出现在 Chrome 中。