関連記事で実装していたサーバレスWebアプリのサンプル向けのSPA/APIのCodePipelineに対して、lint/ユニットテストを行うステージ
とStaging構築ステージのE2Eテストを行うアクション
を追加して自動でテストが実施されるようにしてみました。
関連記事
- TerraformでAWSサーバーレスなサービスのインフラ構築をコード化する
- Serverless FrameworkとTypeScriptでClean ArchitectureライクなREST APIを作ってみる
- Angular6でマテリアルデザイン/ReduxアーキテクチャなSPAフロントエンドを作ってみた
- Angular+Serverless Framework+AWSな構成のサーバレスWebアプリにAmplify+API Gateway Lambda AuthorizerでCognitoユーザ認証を組み込んでみた
今回のコード
それぞれ記事時点のコードにタグを打ってあります。
- GitHub - nihemak/aws-sls-spa-sample-terraform at v0.0.4
- GitHub - nihemak/aws-sls-spa-sample-api at v0.0.4
- GitHub - nihemak/aws-sls-spa-sample-web at v0.0.3
環境構成
下記のAddの部分を追加しました。
E2Eテストを行う環境は新たに用意しようか迷いましたが今回はStaging環境を使うことにしました。
変更概要
API: lint/ユニットテストを行うステージ
npm run docker-test-all
を実施するようにしました。これは元々CircleCI向けにtslint
とmocha
のチェックができるよう用意していたコマンドです。
まずAPI側にCodeBuildから実行するtestspec.ymlを用意しました。CodeBuild環境でのdocker-compose execはTTYを無効にする必要があるようだったのでその対応もしました。
そしてTerraformでIAMロール/CodeBuildの用意とCodePipelineへのstage追加を行うようにしました。
SPA: lint/ユニットテストを行うステージ
こちらもnpm run docker-test-all
を実施するようにしました。これも元々CircleCI向けにtslint
のチェックができるよう用意していたコマンドです。
まずSPA側にCodeBuildから実行するtestspec.ymlを用意しました。これもdocker-compose execのTTYを無効にする対応を行いました。
そしてTerraformでIAMロール/CodeBuildの用意とCodePipelineへのstage追加を行うようにしました。
SPA: E2Eテストを行うアクション
AngularなのでProtractorでE2Eテストするようにしてみました。
まずはE2Eテストが動くように修正しました。*1それからCodeBuildから実行するe2espec.ymlを用意しました。CodeBuildではProtractorをHeadless Chromeで動かすようにしました。*2
そしてTerraformでIAMロール/CodeBuildの用意とCodePipelineへのaction追加を行うようにしました。
下記のリンクは参考にしました。
まとめ
今回はlint/ユニットテストを行うステージ
とStaging構築ステージのE2Eテストを行うアクション
を追加しました。
- CodePipelineの処理に時間がかかっているのは改善したいです。一度buildしたものを使い回すなどできたら少しは改善するかも
- E2Eテストはもう少し拡充したいです。その場合、E2Eテスト前にCognitoやDynamoDBの初期化なども必要になってるかも