nanisore oishisou

Webエンジニアあるまさんのゆるふわ奮闘記。

Laravel5.2だってPHPUnit使ってE2EテストしたいんだYO

皆さん、こんばんわ。

そういえば、ベル子じゃなくてアルマさんになったことを、すっかり忘れていました。
別に名前など、どっちでもいいのだが。

SPAを作ってると、PHPUnitでテストするのには限界がありますというか、テストしたいとこはjsで作ってるとこなんです。
そうなんです。

というわけで、「SPA Laravel テスト」みたいにググると「もしかして、Laravel Dusk?」と表示して・・・くれるまではいかないんですが、Laravelの新しいブラウザーテストパッケージであるLaravel Duskというものの存在に辿り着きます。

さすが、Laravelと思ったのも束の間、私が今作ってるアプリのLaravelのバージョンは5.2。
Laravel Duskが正式に発表されたのはLaravel5.4から。

ベイビー、これは雲行きが怪しいぜ★

開発初期の頃はもしかして5.2で作ってないかなー?と思って githubリポジトリv1.0.0のcomposer.jsonを確認してみた。
Laravel5.3に依存しているようだ。

"illuminate/support": "~5.3",

github.com

なるほどね。
使え無さそうよ。

というわけで、さっきの検索でちらほら出てきたSeleniumという、まるでどこかのブラウザーの名前を彷彿とさせるテストツールについて調べてみようと思ったわけです。

Seleniumの作者は元Googleの人で、現行バージョンのSeleniumはWebDriverという別のツールを統合して作ったものらしい。 WebDriverの作者も元Googleのエンジニアで現Facebookの人だそうです。

どうりでネーミングセンスが同じなわけだね!

と、ここまでまるでSeleniumという1つの何かのソフトウェアが存在するような口ぶりで話を進めてきたが、実は厳密に言うとSeleniumというソフトウェアは存在しない。

告白しよう。
私は「なるほど、Seleniumをインストールすればいいんですね」のような気持ちでいた。

これがSeleniumを導入したくてググってもドンピシャな答えがなかなか出てこない最大の理由である。

要するにSeleniumとは、ブラウザをコードで制御してE2Eテストを実現させるためのツール群の総称、そしてその環境自体(エコシステム)を指す名称ということです。

なので、Seleniumテスト環境を作るために導入しないとならないツールがいろいろあって、それぞれのアプリケーションの言語なんかによってもいろいろな構築方法があるのです。

でも、そんなこと言われても逆に困ります。
私はただ、早くテストがしたいだけなんだ。

そうだ、Laravel Duskと同じようにすればええやん。

中身を読んでみると、Laravel Duskは、facebook/php-webdriverのラッパーツールのようなものっぽい。

php-webdriverはWebDriverをPHPで操作するライブラリだそうな。

Laravel Duskの場合は、スタンドアロンのChromeDriverをサーバを立てずに直接操作しているようなんですが、私は普通に一般的っぽいselenium-server-standaloneを立ち上げて、それにリクエストを投げて中継してもらってWebDriverを起動するという方法で構築してみることにしました。

突然、難しくなってきて涙目の人は下のリンクが分かりやすいので、そこで勉強してきてから戻ってきてください。

app.codegrid.net

これらの環境を整えたら、あとはもうLaravelのテスト書くところにfacebook/php-webdriverのクラスを読み込んでテストコードを書くだけ。 何も難しいことはありません。

まだ研究中なので、何か認識間違いなんかもあるかもしれませんが、また分かってきたことがあったらブログにしたためようと思うよ★楽しみに待っててね。

↓導入の具体的な手順はQiitaにまとめました。

qiita.com

これを今度、社内で説明会するんだけど、うまいこと説明できるかなー。ブログにまとめてもややこしーなー。