Я пытаюсь выполнить модульное тестирование лямбда-функции. Я использую библиотеку aws-sdk-client-mock для насмешек.
Я пытаюсь проверить код состояния 5xx в моей лямбде. Чтобы проверить это, я хочу удалить макет, чтобы возникла ошибка учетных данных (CredentialsProviderError: Could not load credentials from any providers
) (что очевидно). Но поскольку макет первого describe
все еще активен, я не могу его протестировать. Как сбросить макет для разных тестов описания
Единственный способ, которым я собираюсь работать, - это прокомментировать первый блок описания, то есть вообще не использовать макет.
import { APIGatewayProxyResult } from 'aws-lambda';
import { main } from "../../lib/src/lambda/approval-handler";
import { mockClient } from "aws-sdk-client-mock";
import {
CodePipelineClient
} from "@aws-sdk/client-codepipeline";
import { event, queryStringParameters } from "../utils/lambda-event"
describe("Successful Approve or Deny", () => {. //this works
const pipelineClientMock = mockClient(CodePipelineClient);
beforeEach(() => {
pipelineClientMock.reset();
});
it("returns a 301 response with a redirect location if all required query parameters are provided", async () => {
pipelineClientMock.resolves({})
const result: APIGatewayProxyResult = await main(event);
expect(result.statusCode).toEqual(301);
});
})
describe("When Approval or Deny is not sent successfully", () => { //this fails because mock is still active
it("returns a 502 error response if any of the required query parameters are missing", async () => {
const result: APIGatewayProxyResult = await main(event);
expect(result.statusCode).toEqual(502);
});
});
я пробовал не получилось
Пытался сделать это, но не повезло const pipelineClientMock = mockClient(CodePipelineClient); pipelineClientMock.send.callThrough()
Я решил это, переместив экземпляр mockClient внутри каждого блока описания.
а затем использовал метод .restore
, который не был задокументирован (или, может быть, я его пропустил)
describe("When Approval or Deny is not sent successfully", () => {
const pipelineClientMock = mockClient(CodePipelineClient);
beforeEach(() => {
pipelineClientMock.restore();
});
it("returns a 502 error response if any of the required query parameters are missing", async () => {
const result: APIGatewayProxyResult = await main(event);
expect(result.statusCode).toEqual(502);
});
});
Возможно, вы захотите использовать
afterEach
вместо этого