サイトアイコン

toLog

aws-lambda-mock-contextで発生するtimeoutの回避

  • 更新日:
  • 投稿日:
サムネイル

この記事は最終更新日から3年以上が経過しています。

はじめに

SAM で テストする際に Jest と aws-lambda-mock-context をよく使っているのですが、処理が重くなると簡単に timeout 3 秒を超えてエラーになります。

aws-lambda-mock-context では、テスト実行時に mock 用の context を流して擬似的に lambda を実行するため、template.yml のオプションが反映されません。

そして、最初私は template.yml の timeout のオプションがなぜか反映されず困っていました。

ですが、前述のように、そもそも SAM (つまり、template.yml) を通して実行されていないのだから timeout のオプションも反映されません。Jest と aws-lambda-mock-context で完結した実行なのだから、両者でオプションを設定する必要があります。

アホですね 🌝

tl; dr

1"use strict";
2const context = require("aws-lambda-mock-context");
3const app = require("../app");
4const event = require("./event");
5
6describe("タイムアウトのテスト", () => {
7  test("テスト", async () => {
8    // ここで context に timeout オプションを設定
9    let ctx = context({
10      timeout: 10,
11    });
12
13    const response = await app.lambdaHandler(event, ctx, function () {});
14    expect(response.statusCode).toBe(200);
15  });
16});

その他オプション一覧

以下は、aws-lambda-mock-context の公式より、

region

  • Type: string
  • Default: us-west-1

account

  • Type: string
  • Default: 123456789012

functionName

  • Type: string
  • Default: aws-lambda-mock-context

functionVersion

  • Type: string
  • Default: $LATEST

memoryLimitInMB

  • Type: string
  • Default: 128

alias

  • Type: string

timeout

  • Type: number
  • Default: 3

おわりに

ドキュメントを読めってことですね 🔨

参考文献


プロフィール画像

canji

とにかく私的にサービスを作りたい発作を起こしている。お腹はペコペコ。

  • toLog Tools icon
  • dots icon