我遇到一个奇怪的问题,这个测试失败了,没有明显的原因,我不知道发生了什么。有时我会刷新测试,它会通过。其他时候,如果不改变任何东西,它就会失败。想知道是否有人可以解释发生了什么。
以下是一些示例代码:
var viewModel = function() {
return { TestDummy: ko.observable() };
};
QUnit.test("Test 1", function () {
var curModel = new viewModel();
validationTestCore.testMaxLength(curModel.TestDummy, '12345');
QUnit.equal(curModel.TestDummy.errorMessages().length, 1);
});
你可以看到curModel.TestDummy是一个可观察的。这个observable被传递给validationTestCore.testMaxLength,其中errorMessages observableArray被附加到它上面:
TestDummy.errorMessages = ko.observableArray();
TestDummy.errorMessages.push({ errorMessage: 'hello'});
当测试失败时,QUnit结果显示长度评估为0。
有什么想法吗?
答案 0 :(得分:1)
我不知道Knockout.js。
但是,这样的问题的一般原因是因为你的测试是非原子的。 先前测试的成功或失败正在影响其他人。
为了确保测试原子性,QUnit将sessionStorage存储在失败的测试中。在下一次运行中,它将首先执行失败的测试,然后执行剩余的测试。该方法提供不同的测试执行顺序。如果您的测试不是原子测试,则会失败。
更多了解jsfiddle
var truth = false;
test( "always fine test", function() {
truth = !truth;
ok( true, "Passed!" );
console.log("always fine test");
});
test( "will toggle error test", function() {
truth = !truth;
ok( truth, "Passed!" );
console.log("will toggle error test");
});
多次执行整个测试,会产生新的结果。
要避免这种行为,请按照出现的顺序执行测试。
您可以使用QUnit.config.reorder = false
,但不建议这样做。