smptmhr / el-training

株式会社万葉の新入社員教育用カリキュラム
https://everyleaf.com/
2 stars 0 forks source link

Rspecでsleepを使用しない #42

Open smptmhr opened 2 years ago

smptmhr commented 2 years ago

問題点

Rspec中でページURLが更新されるのを待つのにsleepを使っている箇所がある。 sleepを使うと待ち時間でURLが更新される保証がなければ、更新されているのに無駄に待ちが発生する可能性もあり、 テストガチャが発生する可能性がある。

ページURLが更新されたことを必要十分に確認する実装に改良する必要がある。

KessaPassa commented 2 years ago

これかも? https://github.com/smptmhr/el-training/pull/37/files#r929787620

smptmhr commented 2 years ago

課題

テスト中でclick_onを2回以上使用すると、 ページ要素の更新が追いつかずにStaleElementErrorが発生する場合があり、 テストがランダムに落ちる。

これまでの対応

click_onの後ろにsleepを挟み、ページが読み込まれるのを待っていた。 sleepの時間は1秒や3秒など適当に決めており、その待ち時間で過不足ないと断言できず、 これでも不安定にテストは落ちてしまう。

新しい対応

要素の更新が間に合わず、StaleElementErrorが発生するブロックに対して、 テストが落ちた場合はその箇所を1度だけリトライする。 この際、要素を再取得するため、テストは安定して通るようになった。

参考

Rails アプリケーションの不安定なテストを撲滅したい 〜system spec のデバッグ方法とテストを不安定にさせる要因〜 : テストを実行しているサーバの高負荷

その他の問題点

StaleElementErrorを伴わない箇所についてはこの方法では対応できないため、 その箇所は仮でsleepを使用する必要がある。