LoginSignup
2
0

AWS CDKのスナップショットテストに必要最低限の基礎

Posted at

はじめに

本記事は、自分が AWS CDK のスナップショットの学習をした際にメモした内容を、簡素にまとめた内容となります。

CDK Snapshot Test とは

スナップショットと比較して、合成された CloudFormation テンプレートに差分がないかを確認するテストになります。
また、jestなど各言語固有のテストコマンドで実行されます。

ユースケース

  • CDK のバージョンアップ時にリソースに変更がでないか
  • L1 → L2 へのリファクタリングなど

スナップショットの書き方

cdk init sampleapp --language typescriptでプロジェクトを作成した場合、以下のファイルを作成し、npm testを実行することでスナップショットテストを実行することができます。
初回はスナップショットがないため、スナップショットが作成されます。2 回目からスナップショットテストが実施できます。

あと、スナップショットテストを実行すると、スナップショットテストを実行しているファイルと同じ階層に、スナップショットを格納する__snapshots__ディレクトリが作成されます。
好みの問題ですが、test 直下に__snapshot__があると邪魔なので、test/snapshotディレクトリを作成し、その配下にスナップショットテストコードを配置するのがよいのかなと思います。

test/snapshot/sampleapp.test.ts
import * as cdk from "aws-cdk-lib";
import { Template } from "aws-cdk-lib/assertions";
import * as CdkTest from "../../lib/sampleapp-stack";

test("Snapshot Test", () => {
  const app = new cdk.App();
  const stack = new CdkTest.CdkTestStack(app, "MyTestStack");
  const template = Template.fromStack(stack);
  expect(template.toJSON()).toMatchSnapshot();
});

スナップショットの更新方法

CDK を変更した場合(意図した差分の場合)、スナップショットを更新する必要があると思います。
その場合は、以下の-uオプションを付与することで、スナップショットを更新することができます。

npm test -- -u

更新頻度が高いようであれば、package.jsonを修正し
testコマンドを常にスナップショットを更新するようにし、必要に応じてスナップショットテストを実施する運用もありかなと思います。

package.json
  "scripts": {
    "test": "jest -u",
    "test:snap": "jest snapshot"
  },

参照

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0