javascript中の非同期方法のユニットテストとPromise
2220 ワード
後端開発者として、会社のプロジェクトの必要性から、最近Javascriptに転向しました.当社はTDD(テストドライブ開発)と100%カバー率の開発原則を守っていますので、js開発をする時、Jsコードをユニットテストします.普通のjsコードはいいですが、非同期コード(例えば、timers.setTimeout(calback)に遭遇しました.弊社のプロジェクトの特殊性のため、第三者のテストフレームを導入することはできません.オリジナルのjsメソッドと特性を使ってユニットテストを行うしかありません.つまり、私達のユニットテストフレームとastertライブラリは全部自分で書き直しました.
最後に老馬の文章を発見しました.Testing Aynchronous JavaScript.に関する方法を紹介しました.
全体の考え:mockは非同期的にcalbackを呼び出す方法を変えて、直接calbackを直ちに呼び出します.例えば、ajax要求に対してユニットテストを行うなら、テストファイルには$ajax.
Promiseコア思想:懸念点は、operationの呼び出しから処理operationの結果に移る. 1,Promise方法の呼び出しは、操作の結果ではなくpromiseに戻される. promiseは、プロキシであり、動作を表すfuture result. です. Promiseは、in processに対して非同期的に動作するパッケージであり、方法から戻り、方法に伝えられ、queueに格納されている. jqueryのdefferはpromiseに属しています.これはpromiseが解決するのが遅延を伴うイベントであることを示しています.このイベントは未来のある適当な点に延期されて実行されます. 実行プロセス:promiseにcalbackを登録し、操作が完了し、結果が利用できる場合、promiseによってcalbackを実行します. 2,Promiseと非同期同期方法の特性:return value&throw exception. Promiseは、同期された2つの特性を非同期的に与えています.この方法はPromiseに戻らなければならないと規定されています. Promiseオブジェクトには3つの状態があります. Pending–Promiseオブジェクトの初期状態は、タスクの完了または拒否されるまで待つ. Fulfilled–タスクの実行が完了し、成功した状態. Rejectd–タスクの実行が完了し、失敗した状態 Promiseのオプション行動: は一つの値で満たされます. 拒否してexceptionが付いています. これは、then方式で受信された2つのコールバック関数に反映される.
3,The n thenは、統合されたセットにcalbacksを接続するためではなく、 ではなく、Promiseにtransformationを適用し、この変換から新たなpromiseを生成する. 4,Immutable promise方法は新しいpromiseを返さなければなりません.このように一つのpromiseを複数の消費者に割り当てる場合、それらの状態はお互いに干渉しないです. promiseがfulfilled/failedにされた後に、それはimmutableのです. promiseの変換は、4つの場合があります.(2*2、第2節Promiseのオプション行動を参照してください.). 、Jqueryのpromiseは簡単にstate muteを預けられたpromiseに送ります. 5,Exceptionは、異常を捕捉して、rejectionに変換することにより、 異常に最近のレガシーハンドルに泡ができます. 6,Promise仕様 Promiseは、thenメソッドの属性を含むオブジェクトです. このようにしてpromiseの実現を全く知らないで、ライブラリコードを作成することができます.
最後に老馬の文章を発見しました.Testing Aynchronous JavaScript.に関する方法を紹介しました.
全体の考え:mockは非同期的にcalbackを呼び出す方法を変えて、直接calbackを直ちに呼び出します.例えば、ajax要求に対してユニットテストを行うなら、テストファイルには$ajax.
$.ajax = function(ajaxOpts) {
var doneCallback = ajaxOpts.done;
doneCallback(simulatedAjaxResponse);
};
そして、この文章はPromiseを使ってcalbackの代わりに非同期的な方法を作ることを勧めています.Promise
intentional(throw new Error("bad data"))/unintentional(aFunctionThatDoesNotExist())
の異常を処理する.