SPA/サーバレスAPIのCodePipelineにlint/ユニットテスト/E2Eテストを加えてみた

関連記事で実装していたサーバレスWebアプリのサンプル向けのSPA/APIのCodePipelineに対して、lint/ユニットテストを行うステージとStaging構築ステージのE2Eテストを行うアクションを追加して自動でテストが実施されるようにしてみました。

関連記事

今回のコード

それぞれ記事時点のコードにタグを打ってあります。

環境構成

下記のAddの部分を追加しました。

f:id:nihma:20190814110305p:plain

E2Eテストを行う環境は新たに用意しようか迷いましたが今回はStaging環境を使うことにしました。

変更概要

API: lint/ユニットテストを行うステージ

npm run docker-test-allを実施するようにしました。これは元々CircleCI向けtslintmochaのチェックができるよう用意していたコマンドです。

まずAPI側にCodeBuildから実行するtestspec.ymlを用意しました。CodeBuild環境でのdocker-compose execはTTYを無効にする必要があるようだったのでその対応もしました。

github.com

そしてTerraformでIAMロール/CodeBuildの用意とCodePipelineへのstage追加を行うようにしました。

github.com

SPA: lint/ユニットテストを行うステージ

こちらもnpm run docker-test-allを実施するようにしました。これも元々CircleCI向けtslintのチェックができるよう用意していたコマンドです。

まずSPA側にCodeBuildから実行するtestspec.ymlを用意しました。これもdocker-compose execのTTYを無効にする対応を行いました。

github.com

そしてTerraformでIAMロール/CodeBuildの用意とCodePipelineへのstage追加を行うようにしました。

github.com

SPA: E2Eテストを行うアクション

AngularなのでProtractorでE2Eテストするようにしてみました。

まずはE2Eテストが動くように修正しました。*1それからCodeBuildから実行するe2espec.ymlを用意しました。CodeBuildではProtractorをHeadless Chromeで動かすようにしました。*2

github.com

そしてTerraformでIAMロール/CodeBuildの用意とCodePipelineへのaction追加を行うようにしました。

github.com

下記のリンクは参考にしました。

medium.com

stackoverflow.com

まとめ

今回はlint/ユニットテストを行うステージとStaging構築ステージのE2Eテストを行うアクションを追加しました。

  • CodePipelineの処理に時間がかかっているのは改善したいです。一度buildしたものを使い回すなどできたら少しは改善するかも
  • E2Eテストはもう少し拡充したいです。その場合、E2Eテスト前にCognitoやDynamoDBの初期化なども必要になってるかも

*1:今回はトップページの要素を確認するテストだけしか用意してませんmm

*2:Protractorのアクセス先であるbaseUrlはprotractor.conf.jsに定義する必要があります。ここをCodeBuildの環境変数からSPAのCloudFrontのURLを動的に指定したかったのですが方法が分からなかったためbashでcustom_protractor.conf.jsを生成して使う方法にしました。もっと良い方法があれば知りたいです...