e2eテストを書いていて外部サーバーでタイムアウトを発生させる
テストケースを確認したいことがあり
すこしハマったので書きとめておきたい
プラグインはmockttpを使用
//外部サーバーを実行しているラッパーメソッド
function method() {
await api.post(path, request).catch(err => {
if (err.code === 'ECONNABORTED') {
console.log('タイムアウト');
}
});
}
function main() {
method();
}
上のような感じで(例がうまくかけないですが)タイムアウトのときになにか処理させるということをしたく
E2Eテストで外部サーバーでの処理をタイムアウトさせたい、ということがあった
外部サーバーの部分を以下のようにモックしてテストを実行
const endPoint = await mock.post(path).thenTimeout();
こうすると外部サーバーはタイムアウトを返してくれるようになった
ただ、外部サーバーへのリクエストパラメータや呼び出し回数を確認するため
endPoint.getSeenRequests()
をしてリクエストの情報を取得しようとしたが、タイムアウトに・・・
endPointをログにだしてみたがrequestに要素は入っている、Countも1でカウントされている
リクエストの情報も確認したいのでthenCallback()を使うようにした
const endPoint = await mock.post(path).thenCallback(async req => {
await sleep(ms);
return {
statusCode: 200
}
});
sleepは引数の時間分スリープするメソッド
テストのタイムアウト時間より長く設定することで、タイムアウトエラーが発生
endPoint.getSeenRequests()でリクエスト情報を取得できるようになった
thenTimeout()がどういう感じで動いているか
getSeenRequests()でどうしてタイムアウトになってしまうのか
まだ理解しきれていないのでまた確認しておきたい