From 9e11270fbfddd7213dc7dd4ce5ca2b266651f536 Mon Sep 17 00:00:00 2001 From: Hera Zhao Date: Tue, 14 Apr 2026 16:39:51 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20visual-check=E5=8E=BB=E6=8E=89cy.screens?= =?UTF-8?q?hot=E5=92=8Ccy.wait=EF=BC=8C=E6=94=B9=E4=B8=BA=E7=BA=AF?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E6=96=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cy.screenshot()在CI headless环境超时。截图是视觉检查本地跑即可。 Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/cypress/e2e/visual-check.cy.js | 43 +++++++++---------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/frontend/cypress/e2e/visual-check.cy.js b/frontend/cypress/e2e/visual-check.cy.js index 74aaa1c..e605cff 100644 --- a/frontend/cypress/e2e/visual-check.cy.js +++ b/frontend/cypress/e2e/visual-check.cy.js @@ -1,57 +1,44 @@ -describe('Visual Check - Screenshots', () => { +describe('Visual Check', () => { let adminToken before(() => { cy.getAdminToken().then(token => { adminToken = token }) }) - it('homepage with recipes', () => { + it('homepage loads with recipes', () => { cy.visit('/', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.get('.recipe-card', { timeout: 10000 }).should('have.length.gte', 1) - cy.wait(1000) - cy.screenshot('01-homepage') }) - it('recipe detail overlay', () => { - cy.visit('/', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) - cy.get('.recipe-card', { timeout: 10000 }).first().click() - cy.wait(1000) - cy.screenshot('02-recipe-detail') - }) - - it('oil reference page', () => { + it('oil reference loads with chips', () => { cy.visit('/oils', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.get('.oil-chip', { timeout: 10000 }).should('have.length.gte', 1) - cy.wait(500) - cy.screenshot('03-oil-reference') }) - it('manage recipes page', () => { + it('manage recipes page loads', () => { cy.visit('/manage', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) - cy.wait(2000) - cy.screenshot('04-manage-recipes') + cy.get('.recipe-manager', { timeout: 10000 }).should('exist') }) - it('inventory page', () => { + it('inventory page loads', () => { cy.visit('/inventory', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) - cy.wait(1500) - cy.screenshot('05-inventory') + cy.get('.inventory-page', { timeout: 10000 }).should('exist') }) - it('check if recipe cards show price > 0', () => { + it('recipe cards show price > 0', () => { cy.visit('/', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) cy.get('.recipe-card', { timeout: 10000 }).should('have.length.gte', 1) - // Check if any card shows a non-zero price cy.get('.recipe-card').first().invoke('text').then(text => { - cy.log('First card text: ' + text) const priceMatch = text.match(/¥\s*(\d+\.?\d*)/) if (priceMatch) { - cy.log('Price found: ¥' + priceMatch[1]) - const price = parseFloat(priceMatch[1]) - expect(price, 'Recipe card should show price > 0').to.be.gt(0) - } else { - cy.log('WARNING: No price found on recipe card') + expect(parseFloat(priceMatch[1])).to.be.gt(0) } }) }) + + it('recipe detail overlay opens', () => { + cy.visit('/', { onBeforeLoad(win) { win.localStorage.setItem('oil_auth_token', adminToken) } }) + cy.get('.recipe-card', { timeout: 10000 }).first().click() + cy.get('.detail-overlay', { timeout: 10000 }).should('exist') + }) })