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 がオブザーバブルであることがわかります。このオブザーバブルは 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 に答える