Polymer で作ったアプリやカスタムエレメントをテストする
コマンドラインから実行する場合は、以下のように指定します。
$ polymer test
$ wct test/index.html
wct
は web-component-testerの略で、 polymer test
も内部で呼び出しています。
Jenkinsなどを使ってテストしたい場合、wctがnode.jsに対応しているので、gulpから呼び出すようなケースもあるでしょう(私はこの方法を使っています)。
Selenium Grid を使う
Jenkinsからテストする場合、Selenium Gridを使うことが多いのではないでしょうか?
Polymerの公式には、UnitTestは local
もしくは remote(Sauce Labs)
というモードがあるものの、Selenium Gridでテスト可能であることは書いていません。
StackOverflowで調べると解決策が出てきます。
Configure Polymer web-component-tester to use a Selenium Grid server
ここで紹介されている例のとおりで 実行できていました 。
Polymer CLI が 1.0.0 になると動かなくなる
先日の Google I/O '17 のツールセッションでも発表がありましたが、CLIツールが1.0になりました。
さっそく1.0にアップグレードしてみると、Selenium Gridでテストが動かなくなっています。
これの原因を調べるのにかなりの時間を要しましたが、web-component-testerのissueにありました。
WCT ignores the webserver hostname #523
Polymer CLI 1.0でweb-component-testerがv6以上を要求するため、この問題が表面化しました。
詳しくは issue を参照してほしいのですが、今までは最初のstackoverfowのとおり webserver.hostname
が参照されていたのですが、localhost
へのハードコーディングに変更となっています。
変更理由はこちらのチェンジログに書かれています。
Selenium Gridでのテストは正式にサポートされているわけではないので、この変更にどうこう言えないのですが、みんなが Sauce Labs使っているわけではないのでね...
そのissueを上げた人はPRも出していて、マージされないかなーと思っています(cla:yes
になっているのでマージされると思っている)。
現時点の解決策
が、上記修正だと 個人的に 困るので web-component-tester v5.x と同じ設定で Selenium Gridを実行できるように修正しました。
npm install
で入れる場合、TypeScriptをコンパイルしたJavaScriptが必要になる(gitignoreされているので通常ではリポジトリにはない)ので、use-webserver.hostname-by-selenium-grid-4-npm-install
という(コンパイル済みJSファイルを入れた)ブランチを用意しました。以下のコマンドでインストール可能です。
$ npm install https://github.com/sizuhiko/web-component-tester.git#use-webserver.hostname-by-selenium-grid-4-npm-install --save-dev
webserver.hostname
でこれまで通り指定できるようになっています。