ノックアウト ビュー モデルの qunit ユニット テストを作成しようとしていますが、興味深い問題に遭遇しました。
私のビューモデルには、次の機能があります。
Get = function (id) {
return $.ajax({
url: API + "/" + id,
type: 'GET',
dataType: 'json',
timeout: Timeout,
statusCode: {
200: GetOneSuccess,
404: ItemNotFound
},
error: function () {
//Item(null);
}
});
},
次に、単体テストで次のようにします。
vm.Get(vm.Item().Id()).then(function () {
ok(false, "Failure!");
},function () {
equal(vm.Item(), null, "Item was removed");
start();
});
ItemNotFound は次のとおりです。
ItemNotFound = function () {
Item(null);
}
API コントローラが "NotFound (Error 404)" を返した場合は、Item を null に設定します。「then」が呼び出されたときに ItemNotFound 関数がまだ完了していないため、テストが失敗したことがわかりました。
単体テストにタイムアウトを追加すると、次のように機能します。
vm.Get(vm.Item().Id()).then(function () {
ok(false, "Failure!");
},function () {
setTimeout(function () {
equal(vm.Item(), null, "Item was removed");
start();
}, 2000);
});
誰にも考えはありますか?statusCodes を気にせず、エラー ハンドラですべてのエラー タイプを処理する必要がありますか? エレガントには見えません。