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 des fonctionnalités puissantes pour simuler et stubbing les requêtes HTTP, vous permettant de simuler différents scénarios sans compter sur les 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 où 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. Le as('getTodos') attribue un alias à la requête interceptée, ce qui facilite la référence dans vos tests.
Simulation des 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 façon 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 de la demande ou des en-têtes :
// 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 exemples fournis dans ce guide pour maîtriser le mocking et le stubbing dans vos tests Cypress.
Bon test !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!