Weitere ähnliche Inhalte
Ähnlich wie プロキシーを使ってテストを楽にする (20)
Mehr von Shunji Konishi (16)
プロキシーを使ってテストを楽にする
- 10. 各種フィルタ
◦イメージを隠す
◦Js/cssを隠す
◦パスの部分一致でフィルタリング
JSONのprettyPrint
UrlEncodedのデコード
テストの生成
リクエスト/レスポンスを同時に表示するので見やすい
WebSocketが見られるのは便利(ChromeのDevToolで は日本語が化ける)
ネットワークの見られないIE8で特に重宝する
- 12. 選択したリクエストを順次実行し、保存したレスポンス と比較する
◦ステータスコード
◦レスポンスがJsonの場合は保存したBodyと各項目を比較
日付やオートインクリメントの項目があると、あっさり 失敗する(--
◦レコードの新規作成時のキーや作成日は毎回異なるのでそ のままでは使えない
現在WebSocketのテストには未対応
multipart/form-dataにも未対応
◦必要に迫られたら作る
- 14. 拡張ポイントは以下の3つ
◦buildTestData: テストデータをカスタマイズする
◦hookRequest: リクエスト(パラメータ)をカスタマイズする
◦validate: 独自のassertionを行う。Trueを返した場合はデ フォルトの検証はスキップされる
module.exports= {
buildTestData: function(request, data) { return data;},
hookRequest: function(prevResponse, request) { return request;},
validate: function(request, response) { return false;}
}
- 15. アイテムを新規作成後に削除
varextend = require("extend"),
IGNORE_VALUE = "__IGNORE__";
module.exports= {
buildTestData: function(request, data) {
//新規作成時はキーと日付項目を無視
if (request.path=== "/item/new") {
data = extend(data, {
"id" : IGNORE_VALUE
"updatedatetime" : IGNORE_VALUE
});
}
return data;
},
hookRequest: function(prevResponse, request) {
//削除時はパスのキー部分を変更
if (request.path.indexOf("/item/delete/") === 0) {
request.path= "/item/delete/" + prevResponse.body.newId;
}
return request;
}
}
- 18. Interceptorの実装クラスを作成し、
InterceptorResistryに登録
参考: SampleInterceptor.scala
packageinterceptors
importmodels.RequestMessage
importmodels.ResponseMessage
traitInterceptor {
//リクエストのフック
//改変したリクエスト、または独自レスポンスを返す
defhookRequest(request: RequestMessage): Either[RequestMessage, ResponseMessage]
= Left(request)
//レスポンスのフック
//改変したレスポンスを返す
defhookResponse(request: RequestMessage, response: ResponseMessage): ResponseMessage
= response
}