종단 간 테스트의 경우 외부 종속성을 제어하면 테스트의 안정성과 속도를 크게 향상시킬 수 있습니다. 최신 웹 테스트 프레임워크인 Cypress는 HTTP 요청을 조롱하고 스터빙하는 강력한 기능을 제공하므로 실제 백엔드 서비스에 의존하지 않고도 다양한 시나리오를 시뮬레이션할 수 있습니다. 이 게시물에서는 테스트를 더욱 강력하고 효율적으로 만들기 위해 API 호출 모킹 및 스터빙에 Cypress의 cy.intercept()를 활용하는 방법을 살펴보겠습니다.
Cypress의 HTTP 요청 모의 및 스텁은 다음과 같은 여러 이점을 제공합니다.
아직 Cypress를 설치하지 않았다면 다음 명령을 사용하여 설정할 수 있습니다.
npm install cypress --save-dev npx cypress open
진행하기 전에 기본 Cypress 프로젝트 구조가 준비되어 있는지 확인하세요.
Cypress의 cy.intercept() 명령을 사용하면 네트워크 요청과 응답을 가로채고 수정할 수 있습니다. 더 이상 사용되지 않는 cy.route() 명령을 대체하고 더 많은 유연성과 성능을 제공합니다.
기본 예
API 응답을 모의하는 기본 예제부터 시작해 보겠습니다.
// cypress/integration/mock_basic.spec.js describe('Mocking API Responses', () => { it('should display mocked data', () => { cy.intercept('GET', '/api/todos', { statusCode: 200, body: [ { id: 1, title: 'Mocked Todo 1', completed: false }, { id: 2, title: 'Mocked Todo 2', completed: true } ] }).as('getTodos'); cy.visit('/todos'); cy.wait('@getTodos'); cy.get('.todo').should('have.length', 2); cy.get('.todo').first().should('contain.text', 'Mocked Todo 1'); }); });
이 예에서는 /api/todos에 대한 GET 요청을 가로채고 모의 응답을 제공합니다. as('getTodos')는 가로채는 요청에 별칭을 할당하여 테스트에서 더 쉽게 참조할 수 있도록 합니다.
오류 시뮬레이션
다양한 HTTP 오류 상태를 시뮬레이션하여 애플리케이션이 이를 처리하는 방법을 테스트할 수 있습니다.
// cypress/integration/mock_errors.spec.js describe('Simulating API Errors', () => { it('should display error message on 500 response', () => { cy.intercept('GET', '/api/todos', { statusCode: 500, body: { error: 'Internal Server Error' } }).as('getTodosError'); cy.visit('/todos'); cy.wait('@getTodosError'); cy.get('.error-message').should('contain.text', 'Failed to load todos'); }); });
응답 지연
애플리케이션이 느린 네트워크 응답을 어떻게 처리하는지 테스트하려면 지연을 도입할 수 있습니다.
// cypress/integration/mock_delays.spec.js describe('Simulating Slow Responses', () => { it('should display loading indicator during slow response', () => { cy.intercept('GET', '/api/todos', (req) => { req.reply((res) => { res.delay(2000); // 2-second delay res.send({ body: [] }); }); }).as('getTodosSlow'); cy.visit('/todos'); cy.get('.loading').should('be.visible'); cy.wait('@getTodosSlow'); cy.get('.loading').should('not.exist'); }); });
조건부 조롱
요청 본문이나 헤더를 기반으로 조건부로 응답을 모의할 수 있습니다.
// cypress/integration/mock_conditional.spec.js describe('Conditional Mocking', () => { it('should mock response based on request body', () => { cy.intercept('POST', '/api/todos', (req) => { if (req.body.title === 'Special Todo') { req.reply({ statusCode: 201, body: { id: 999, title: 'Special Todo', completed: false } }); } }).as('createTodo'); cy.visit('/todos'); cy.get('input[name="title"]').type('Special Todo'); cy.get('button[type="submit"]').click(); cy.wait('@createTodo'); cy.get('.todo').should('contain.text', 'Special Todo'); }); });
Cypress의 모의 및 스터빙은 테스트를 더 빠르고 안정적이며 유지 관리하기 쉽게 만들 수 있는 강력한 기술입니다. HTTP 요청을 가로채고 사용자 지정 응답을 제공함으로써 외부 서비스에 의존하지 않고도 광범위한 테스트 시나리오를 만들 수 있습니다. Cypress 테스트에서 모킹 및 스터빙을 마스터하려면 이 가이드에 제공된 모범 사례와 예제를 따르세요.
즐거운 테스트를 진행하세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3