いま盛り上がっているTwitterスペース、気になるトピックを語っているTwitterスペースなどをかんたんに見つけられるspaces.bz(クローズ済み)というプロダクトを友人と運営しています。
特に開発の初期段階なので、機能追加も頻繁に行っており、勇気と自信をもってプロダクトションへのデプロイを繰り返すためには、やはりテストの自動化が必要です。 spaces.bzはNuxt.js on Dockerで開発しており、今回は TestCafe でテスト自動化を導入しています。 TestCafeは、クロスブラウザに対応しており、テストコードも非常にわかりやすく書けるのが特徴です。 今回は「Headless Chromeでテストがしたい」、テストコードに馴染みのない友人と一緒に開発のため「わかりやすいテストコード」が良いという2つの理由からTestCafeを利用しました。
この記事では、Nuxt on Dockerの環境でTestCafeを導入し、かんたんなテストを実行するところまでをまとめていきます💪。
準備
Dockerfile
とdocker-compose.yml
は次のようなものを想定しています。
TestCafeをインストールする
TestCafeのパッケージ をインストールします。今回はyarn
を使っているので、以下のコマンドを実行します。
DockerfileでChromeをインストールする
今回はHeadless Chromeを使ってテストをしたいので、DockerコンテナでChromeを起動できる状態にしておく必要があります。
ChromeのStable版と、日本語のフォントを表示するためにfonts-noto-cjk
をインストールするように追記しました。 追記ができたらビルドして、Dockerイメージを作成しましょう。
コマンドでTestCafeを起動できるようにする
次はコンテナでTestCafeを起動するコマンドの準備をしていきます。コンテナでyarn test
のコマンドを実行したときにTestCafeが動くようにしましょう。
testcafe
の後ろにchrome:headless
を与えることでHeadless Chromeをコンテナ内で起動してテストしようとしてくれるんですね。 詳しくは このへん に書いてます。
テストコードを書く
いよいよテストコードです。まずはテスト用のディレクトリとファイルを作っておきましょう。
テストの内容は「トップページにアクセスして、<h1>
タグでHello World!!
と表示されていること」を検証してみましょう。
なんか読みやすそうです😃。 fixture
でテスト全体に関する設定とかを行っています。このテストファイルはSample
って名前で、http://localhost:3000
にアクセスするところから始まるよって感じです。 test
でその後の操作や検証を書いていきます。test
は1ファイルに複数書けます。 今回は.expect(A).eql(B)
を使ってA
とB
が一緒であることを検証してみます。 A
の方はSelector('h1').innerText
と書きました。最初に現れたh1
タグのinnerText
を取得してます。こんな感じで使い慣れたJavaScriptも使えるんですね。 B
の方にHello World!!
の文字列を書けば、「最初に現れたh1
タグのinnerText
がHello World!!
と一致すればテスト成功」となります。
ページを編集
このままテストを実行しても失敗するので、ページも編集しておきます。 TDDでやってみたい場合は、この時点で一度テストを実行してFailになることを確認してもOKです😆。
テストを実行する
ではテストを実行しましょう。 テストを実行する前にコンテナを起動させておきます。
そして、exec
を使って起動したコンテナ内でTestCafeを実行します。
PASSしました。出力も非常にわかりやすいですね。
まとめ
この記事では、Nuxt on DockerにTestCafeを導入して、かんたんな自動テストを書いてみました。 自動テストがあれば、機能追加を頻繁に行なう環境でも勇気と自信を持ってデプロイできます。 そして、 TestCafe はとても直感的なテストコードを書け、クロスブラウザにも対応しているすぐれものでした。