Cypressが動かなくなった

Photo by Clint Patterson on Unsplash

CypressによるローカルでのE2Eテストが動かなくなった。何もしていないのに(しばらくブログ書いていなかった)。 結果的に対処できたが、「結論」と「多少の試行錯誤」についてまとめてみた。

Cypress runが動かなくなった

以下のような現象が発生した

結論

以下のとおり更新したら動くようになった。

実施したこと

仮設1: リクエストに時間がかかっている

cypressのテストがタイムアウトするので、まず考えられたのがserverが起動する前にcypressが動いてしまっているケース。 調べた結果、cypressを待たせる対処法が散見された。以下はいろいろなケースに対処する方法がまとめられている。

ただ、defaultCommandTimeout値を変えても改善されなかった。原因の可能性は低いと判断して次の仮設を考える。

仮設2: start-server-and-test側の問題

start-server-and-testの設定の問題だと考えた。 調べてみると、start-server-and-testを使っていれば大きな問題はなさそうなのがわかった。ただ、webpack-dev-serverを使っている場合は別途対応が必要。 私のE2E構成については「HugoのE2EをCypressでやってみた - gorou-style」を参照。

ちなみにwebpack-dev-serverを利用している場合は以下が参考になると思う。

仮設3: packageのversion up

しばらくnodeおよびnpmのメンテをしていなかったので、依存関係によって動かなくなったケースだと考えた。 まず利用しているパッケージを何も考えずに最新に更新した。

もともと、cypress 7.4を利用していたのだがnodeの依存がv14以上(正確には=>14.16.0)だったため、安全側に倒してv14を利用していた。 cypress 9系では、nodeの依存がv16以上(正確には=>16.5.0)。プロジェクトの .node-version の変更も実施。

最終的に以下の変更を実施した

   "devDependencies": {
-    "cypress": "^7.4",
-    "start-server-and-test": "^1.12"
+    "cypress": "^9.5",
+    "start-server-and-test": "^1.14"
   }

しかし、これだけでは動いたり動かなかったりしたが、package-lock.jsonnode_modulesの削除でキレイに動くようになった。キャッシュが影響していたようだ。

まとめ

しばらくブログを書かず久々にCIを動かしたところ、ローカルのE2Eテストが全滅していて驚いた。各パッケージを最新にすることで沼にはまらず解決できて助かった。 cypressとstart-server-and-testのreleaseをざっと眺めてみたが、原因になりそうな情報は見つけられなかったのが残念(根本原因不明)。

npmパッケージは頻繁にバージョンが上がっていくので(node自体も)、定期的にチェックして上げていきたい(自動化できるとなお良さそう)。

駄文

サンプルアプリケーションを書いていて、利用しているライブラリのリポジトリを見ていたらコントリビューションできそうな箇所を発見したので初コントリビューションしてみた。

対象のリポジトリは、コントリビューションのドキュメントがとてもしっかりしていたため、そこまで悩まずに(全部英語なので苦戦はしたが)Pull Requestを出せた。数時間くらいでチェックされすぐにマージされ、表現に困るがとても嬉しかった!

See Also