0
0

serverless framework ローカル開発環境だけでテストする(モック使用)

Last updated at Posted at 2024-09-01

概要

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.js
    const 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
    
0
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
0
0