概要
serverless frameworkにてローカル開発環境に閉じてテストが行えるようにするまでの方法をまとめる。
下記で紹介したローカル開発環境でのテスト方法は手軽だが、モックを使っていないのでテストだとしてもaws-sdkを使って実際にリクエストが飛んでしまっている。
今回はデプロイ内容的に実際にリクエストが飛んでも問題は無いがモックを使ったものも学んでおきたいのでその方法を記載する。
前提
下記の内容が完了していること
また、下記のモックを使わないテストも実施していることが望ましい
方法
-
aws-cost-notifyディレクトリで下記を実行して必要なパッケージをローカル開発環境向けにインストール
npm install --save-dev jest aws-sdk-mock
-
aws-cost-notifyディレクトリ直下にhandler.test.jsというファイルを作成し、下記のように記載
aws-cost-notify/handler.test.jsconst AWSMock = require('aws-sdk-mock'); const { notify } = require('./handler'); AWSMock.mock('CostExplorer', 'getCostAndUsage', (params, callback) => { callback(null, { ResultsByTime: [] }); }); test('notify function', async () => { const event = { source: 'aws.cost', 'detail-type': 'AWS Cost and Usage Report', detail: { key1: 'value1' } }; // lambdaトリガー時のイベントを指定 const result = await notify(event); // 関数の実行 // 結果の評価 expect(result.statusCode).toBe(200); expect(JSON.parse(result.body)).toEqual({ "message": "コスト通知が正常に処理されました" }); }); AWSMock.restore('CostExplorer'); // モックの解除
-
package.jsonを開きscriptsのtestを下記のように書き換え
aws-cost-notify/package.json"scripts": { "test": "jest" },
-
下記を実行して上記で定義したテストを実行
npm test
-
下記のようにPASSと出たら完了
PASS ./handler.test.js ✓ notify function (937 ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 total Time: 2.297 s, estimated 3 s