typescript - Parsning av body-sträng med middy när man anropar en AWS Lambda-hanterare med Jest?


Tar en Lambda-handler skriven i TypeScript

const identityUrl: ValidatedEventAPIGatewayProxyEvent<typeof schema> = async (event) => {
    const iFRequest = event.body as unknown as IFRequest;
    const fileUrl = iFRequest;
    return formatJSONResponse({
        result: fileUrl,
    });
}

export const main = middyfy(identityFileGetSigner);

Och att anropa det med ett Jest-testfall resulterar i att kroppen skickas till lambdan som en oparsad sträng.

const defaultEvent: APIGatewayProxyEvent = {
  httpMethod: 'post',
  headers: {Authorization: "dummyToken"},
  body: JSON.stringify(apiParamsBasic),
  isBase64Encoded: false,
  path: '/url',
  multiValueQueryStringParameters: null,
  multiValueHeaders: null,
  pathParameters: null,
  queryStringParameters: null,
  stageVariables: null,
  requestContext: null,
  resource: ''
}

test('Empty list', async () => {
  const result1 = await main(defaultEvent, defaultContext);
}

Hur kan jag få Middy att analysera strängen?

Svar #1

Jag hade samma problem ovan där JSON-strängen inte parsades av middy i Jest-tester.

Att lägga till Content-Type-huvudet som application/json i headers i testhändelsen löste problemet.

I ditt testevenemang ovan skulle det se ut så här:

const defaultEvent: APIGatewayProxyEvent = {
  httpMethod: 'post',
  headers: { Authorization: "dummyToken", 'Content-Type': 'application/json' },
  body: JSON.stringify(apiParamsBasic),
  isBase64Encoded: false,
  path: '/url',
  multiValueQueryStringParameters: null,
  multiValueHeaders: null,
  pathParameters: null,
  queryStringParameters: null,
  stageVariables: null,
  requestContext: null,
  resource: ''
}