Quando se trata de testes ponta a ponta, o controle de dependências externas pode aumentar significativamente a confiabilidade e a velocidade de seus testes. Cypress, uma estrutura moderna de teste da web, oferece recursos poderosos para simular e stub solicitações HTTP, permitindo simular diferentes cenários sem depender de serviços de back-end reais. Nesta postagem, exploraremos como aproveitar cy.intercept() do Cypress para simular e stub chamadas de API para tornar seus testes mais robustos e eficientes.
Mocking e stubbing de solicitações HTTP no Cypress oferecem vários benefícios:
Se você ainda não instalou o Cypress, você pode configurá-lo com os seguintes comandos:
npm install cypress --save-dev npx cypress open
Certifique-se de ter a estrutura básica do projeto Cypress pronta antes de prosseguir.
O comando cy.intercept() no Cypress permite interceptar e modificar solicitações e respostas de rede. Ele substitui o comando obsoleto cy.route() e oferece mais flexibilidade e poder.
Exemplo básico
Vamos começar com um exemplo básico onde simulamos uma resposta da 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'); }); });
Neste exemplo, interceptamos uma solicitação GET para /api/todos e fornecemos uma resposta simulada. O as('getTodos') atribui um alias à solicitação interceptada, facilitando a referência em seus testes.
Simulando erros
Você pode simular vários status de erro HTTP para testar como seu aplicativo os trata:
// 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'); }); });
Atrasando respostas
Para testar como seu aplicativo lida com respostas lentas de rede, você pode introduzir um atraso:
// 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'); }); });
Zombaria Condicional
Você pode simular respostas condicionalmente com base no corpo ou nos cabeçalhos da solicitação:
// 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'); }); });
Mocking e stubbing no Cypress são técnicas poderosas que podem tornar seus testes mais rápidos, mais confiáveis e mais fáceis de manter. Ao interceptar solicitações HTTP e fornecer respostas personalizadas, você pode criar uma ampla variedade de cenários de teste sem depender de serviços externos. Siga as melhores práticas e exemplos fornecidos neste guia para dominar a zombaria e o stub em seus testes Cypress.
Bom teste!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3