Ujian tidak mudah adalah cabaran biasa dalam ujian automatik. Ia adalah ujian yang kadangkala lulus dan kadangkala gagal atas sebab yang tidak berkaitan dengan perubahan kod, yang membawa kepada keputusan ujian yang tidak konsisten dan tidak boleh dipercayai. Dalam siaran ini, kami akan meneroka punca ujian serpihan di Cypress dan membincangkan amalan terbaik serta strategi untuk mengendalikannya dengan berkesan.
Ujian serpihan ialah ujian yang mempamerkan tingkah laku bukan penentu, bermakna ia tidak selalu menghasilkan keputusan yang sama apabila dijalankan dalam keadaan yang sama. Ketidakkonsistenan ini boleh menjejaskan kebolehpercayaan suite ujian anda dan menghakis keyakinan dalam ujian automatik anda.
cy.intercept('GET', '/api/data', { fixture: 'data.json' }).as('getData'); cy.visit('/'); cy.wait('@getData');
cy.get('.spinner').should('not.exist'); // Ensure spinner is gone cy.get('.data-list').should('be.visible'); // Ensure data list is visible
Cypress.Commands.add('login', (username, password) => { cy.get('input[name="username"]').type(username); cy.get('input[name="password"]').type(password); cy.get('button[type="submit"]').click(); cy.url().should('include', '/dashboard'); });
// Install the plugin first: npm install -D cypress-plugin-retries require('cypress-plugin-retries'); // Enable retries in your test Cypress.env('RETRIES', 2); // Example test with retries it('should display data after retry', () => { cy.visit('/data-page'); cy.get('.data-item').should('have.length', 10); // Retry if fails });
beforeEach(() => { cy.exec('npm run reset-db'); // Reset the database cy.visit('/'); });
// Use data attributes for selectors cy.get('[data-cy="submit-button"]').click();
describe('Flaky Test Example', () => { beforeEach(() => { cy.visit('/'); }); it('should load data reliably', () => { // Use intercept to stub network request cy.intercept('GET', '/api/data', { fixture: 'data.json' }).as('getData'); cy.get('button[data-cy="load-data"]').click(); cy.wait('@getData'); // Use robust selector and assertion cy.get('[data-cy="data-list"]').should('have.length', 5); }); it('should handle spinner correctly', () => { // Ensure spinner is not visible before asserting data cy.get('.spinner').should('not.exist'); cy.get('[data-cy="data-list"]').should('be.visible'); }); });
Mengendalikan ujian mengelupas adalah penting untuk mengekalkan suite ujian yang boleh dipercayai dan teguh. Dengan memahami punca biasa kepincangan dan melaksanakan amalan terbaik, anda boleh mengurangkan dengan ketara berlakunya ujian mengelupas dalam projek Cypress anda. Ingatlah untuk memanfaatkan ciri dan alatan Cypress yang berkuasa untuk memastikan ujian anda bersifat deterministik, terpencil dan stabil.
Selamat menguji!
Atas ialah kandungan terperinci Mengendalikan Ujian Bersisik dalam Cypress: Amalan dan Strategi Terbaik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!