1

我遇到了一个奇怪的问题,这个测试无缘无故地断断续续,我不确定发生了什么。有时我会刷新测试,它会通过。其他时候,不改变任何东西,它就会失败。想知道是否有人可以解释发生了什么。

这是一些示例代码:

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。这个 observable 被传递给 validationTestCore.testMaxLength,errorMessages observableArray 被附加到它上面,如下所示:

TestDummy.errorMessages = ko.observableArray();
TestDummy.errorMessages.push({ errorMessage: 'hello'});

当测试失败时,QUnit 结果显示长度评估为 0。

有任何想法吗?

4

1 回答 1

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,但不建议这样做。

于 2013-05-10T17:34:52.657 回答