Почему mock не сбрасывается в Jest для модульного тестирования aws sdk v3?

Я пытаюсь выполнить модульное тестирование лямбда-функции. Я использую библиотеку 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);
    });
});

Возможно, вы захотите использовать afterEach вместо этого

Phil 06.04.2023 05:38

я пробовал не получилось

Jatin Mehrotra 06.04.2023 05:43

Пытался сделать это, но не повезло const pipelineClientMock = mockClient(CodePipelineClient); pipelineClientMock.send.callThrough()

Jatin Mehrotra 06.04.2023 07:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я решил это, переместив экземпляр 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);
        
    });
});

Другие вопросы по теме