En ce qui concerne les tests de bout en bout, le contrôle des dépendances externes peut améliorer considérablement la fiabilité et la rapidité de vos tests. Cypress, un framework de test Web moderne, offre de puissantes fonctionnalités de simulation et de stubbing des requêtes HTTP, vous permettant de simuler différents scénarios sans recourir aux services backend réels. Dans cet article, nous explorerons comment tirer parti de cy.intercept() de Cypress pour moquer et stubbing les appels d'API afin de rendre vos tests plus robustes et efficaces.
Les requêtes HTTP moqueuses et stubbing dans Cypress offrent plusieurs avantages :
Si vous n'avez pas encore installé Cypress, vous pouvez le configurer avec les commandes suivantes :
npm install cypress --save-dev npx cypress open
Assurez-vous que la structure de base du projet Cypress est prête avant de continuer.
La commande cy.intercept() dans Cypress vous permet d'intercepter et de modifier les requêtes et réponses réseau. Elle remplace la commande obsolète cy.route() et offre plus de flexibilité et de puissance.
Exemple de base
Commençons par un exemple de base dans lequel nous nous moquons d'une réponse 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'); }); });
Dans cet exemple, nous interceptons une requête GET vers /api/todos et fournissons une réponse simulée. as('getTodos') attribue un alias à la requête interceptée, ce qui facilite la référence dans vos tests.
Simulation d'erreurs
Vous pouvez simuler différents statuts d'erreur HTTP pour tester la façon dont votre application les gère :
// 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'); }); });
Retarder les réponses
Pour tester la manière dont votre application gère les réponses réseau lentes, vous pouvez introduire un délai :
// 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'); }); });
Moquerie conditionnelle
Vous pouvez simuler les réponses de manière conditionnelle en fonction du corps ou des en-têtes de la demande :
// 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'); }); });
La moquerie et le stubbing dans Cypress sont des techniques puissantes qui peuvent rendre vos tests plus rapides, plus fiables et plus faciles à maintenir. En interceptant les requêtes HTTP et en fournissant des réponses personnalisées, vous pouvez créer un large éventail de scénarios de test sans recourir à des services externes. Suivez les meilleures pratiques et les exemples fournis dans ce guide pour maîtriser le mocking et le stubbing dans vos tests Cypress.
Bon test !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3