webpack
webpack-dev-server

travis 上で webpack-dev-server に HEAD リクエスト送るとうまくいかない

タイトルのとおりです。

    "wait-on": "^2.1.0",
    "webpack": "^4.2.0",
    "webpack-cli": "^2.0.13",
    "webpack-dev-server": "^3.1.1"

TL;DR

HEAD の代わりに GET を使いましょう。


やりたかった事としては、テスト実行時に webpack-dev-server でサーバーを立ち上げて、ready になったら後続の処理を行うというもの。
npm に wait-on というモジュールがあり、これを使ってサーバーが準備完了となるのを待っていた。

waitOn(
      {
        resources: ["http://localhost:9999"]
      },
      err => {
        if (err) return reject(err);
        resolve();
      }
    );

こんな感じ。

ローカルではこれでうまく行っていたが、travis で実行すると wait-on のところでタイムアウトになっていた。
travis に ssh デバッグして curl したりしてもちゃんと返ってきているのでなんだろうと。
wait-on の実装を読むとデフォルトでは HEAD リクエストで完了を待っている模様。
試しに curl で HEAD を送ると見慣れない終了コードが返ってきていて、これで失敗してタイムアウトタイムアウト気づく。
wait-on は http:// だと HEAD リクエストを送るが http-get:// なら GET リクエストを送って待ってくれるみたいなので、これを使って事なきを得た。