Cypress tests often become flaky when developers assume cy.wait('@alias') waits for every new request. It doesn’t. Aliases capture only the first match, so later waits may resolve instantly. The fix: re-intercept before each occurrence or use times: 1 to create one-shot intercepts that “consume” themselves. But the real solution is avoiding network waits altogether. Instead, rely on user-visible, accessible UI states (spinners, aria-busy, disabled buttons, status messages). This makes tests stable, realistic, and far more reliable than waiting on network events.Cypress tests often become flaky when developers assume cy.wait('@alias') waits for every new request. It doesn’t. Aliases capture only the first match, so later waits may resolve instantly. The fix: re-intercept before each occurrence or use times: 1 to create one-shot intercepts that “consume” themselves. But the real solution is avoiding network waits altogether. Instead, rely on user-visible, accessible UI states (spinners, aria-busy, disabled buttons, status messages). This makes tests stable, realistic, and far more reliable than waiting on network events.

Achieving Reliable E2E Tests in Cypress: Overcome cy.wait Pitfalls

2025/11/26 13:14

Cypress gives frontend engineers a superpower: the ability to write E2E tests that watch our app behave just like a real user would. But with great power comes… well, a lot of subtle flakiness if you’re not careful.

The cy.wait Illusion: What's Really Happening

The scenario is simple: you have a component that loads data, and after a user action, it loads new data using the same API endpoint. To ensure the new data has arrived, you intercept the request and then use cy.wait('@requestAlias') multiple times.

// A common, flawed approach: cy.intercept('GET', '/api/items/*', { fixture: 'item-1' }).as('getItems'); cy.visit('/items'); // 1. Wait for the initial load cy.wait('@getItems'); // ... User performs an action that triggers the SAME request ... // 2. Wait for the second load cy.wait('@getItems'); // <-- THIS IS THE PROBLEM

The Flaw

Cypress's cy.intercept logic is designed to capture a single match for an alias. When you call cy.wait('@getItems') for the first time, it finds the initial request, waits for its resolution, and then the alias is fulfilled.

When you call cy.wait('@getItems') a second time, Cypress does not reset the listener. Instead, it checks if a request has already been resolved with that alias. Because the first request has resolved, the second cy.wait command resolves immediately, without waiting for the new network call to finish. Your test is now racing against the network, not waiting for it.

Fix #1: Re-intercept before each expected request

(Works, explicit, but verbose)

cy.intercept('GET', '/api/items').as('getItems_1') cy.get('[data-testid=refresh]').click() cy.wait('@getItems_1') cy.intercept('GET', '/api/items').as('getItems_2') cy.get('[data-testid=load-more]').click() cy.wait('@getItems_2')

Clear, deterministic, but repetitive.

Fix #2: Use times: 1 to force Cypress to “consume” intercepts

(Cleaner: Cypress forgets the intercept after one match)

This is the missing tool many engineers don’t realize exists.

cy.intercept({ method: 'GET', pathname: '/api/items', times: 1 }).as('getItems') // trigger request 1 cy.get('[data-testid=refresh]').click() cy.wait('@getItems') cy.intercept({ method: 'GET', pathname: '/api/items', times: 1 }).as('getItems') // trigger request 2 cy.get('[data-testid=load-more]').click() cy.wait('@getItems')

Why this works:

  • times: 1 means Cypress removes the intercept after a single matching request
  • Re-declaring the intercept creates a fresh listener
  • Each cy.wait('@getItems') now truly waits for the next occurrence

This technique gives you explicit, occurrence-specific intercepts without alias clutter. For tests that must assert network behavior (payloads, headers, error flows), it’s a clean and robust pattern.

Fix #3: Stop waiting for requests altogether

(The best fix. UI > network.)

Here’s the golden rule:

That means the most stable tests assert what the user sees:

  • A loading spinner appears → disappears
  • A button becomes disabled → enabled
  • A success message appears when an action is complete.
  • The newly loaded element is now visible in the DOM.

Example with user-visible cues:

cy.get('[data-testid=refresh]').click() cy.get('[data-testid=spinner]').should('exist') cy.get('[data-testid=spinner]').should('not.exist') cy.get('[data-testid=item-list]') .children() .should('have.length.at.least', 1)

No reliance on internal network timing. No alias lifecycle. Zero flake.

Accessibility makes this even more robust

Accessible UI patterns make great Cypress hooks:

aria-busy attribute

<ul data-testid="item-list" aria-busy="true">

Test:

cy.get('[data-testid=item-list]').should('have.attr', 'aria-busy', 'false')

role="status" with live regions

<div role="status" aria-live="polite" data-testid="status"> Loading… </div>

Test:

cy.get('[data-testid=status]').should('contain', 'Loaded 10 items')

Disabled states for actions

cy.get('[data-testid=submit]').should('be.disabled') cy.get('[data-testid=submit]').should('not.be.disabled')

These patterns aid screen reader users and produce stable, deterministic E2E tests.

When waiting for requests is appropriate

There ARE valid scenarios:

  • Asserting payloads or query params
  • Mocking backend responses
  • Validating request ordering
  • Verifying retry logic
  • Testing error handling flows

For those cases: Combine times: 1 with explicit, fresh intercepts defined right before triggers.

For other cases: the test should rely on the UI state.

A combined real-world example

(Network + UI, the best of both worlds)

// UI-driven loading signal cy.get('[data-testid=create]').click() cy.get('[data-testid=spinner]').should('exist') // Network contract check cy.intercept({ method: 'POST', pathname: '/api/items', times: 1 }).as('postItem') cy.get('[data-testid=create]').click() cy.wait('@postItem') .its('request.body') .should('deep.include', { title: 'New item' }) // Final user-visible assertion cy.get('[data-testid=status]').should('contain', 'Item created')

The network part is accurate. The UI part is resilient. The test is rock-solid.

Final checklist

For accessible, deterministic, non-flaky Cypress tests

  • Prefer user-visible UI state, not network events
  • Use aria-busy, role="status", aria-live, and disabled states
  • When waiting for requests:
  • Re-intercept before each occurrence, OR
  • Use times: 1 to auto-expire the intercept
  • Avoid global, long-lived intercepts
  • Never assume cy.wait('@alias') waits “for the next request”
  • Make loading and completion states accessible (good for tests, good for users)

\

Disclaimer: The articles reposted on this site are sourced from public platforms and are provided for informational purposes only. They do not necessarily reflect the views of MEXC. All rights remain with the original authors. If you believe any content infringes on third-party rights, please contact [email protected] for removal. MEXC makes no guarantees regarding the accuracy, completeness, or timeliness of the content and is not responsible for any actions taken based on the information provided. The content does not constitute financial, legal, or other professional advice, nor should it be considered a recommendation or endorsement by MEXC.

You May Also Like

Shocking OpenVPP Partnership Claim Draws Urgent Scrutiny

Shocking OpenVPP Partnership Claim Draws Urgent Scrutiny

The post Shocking OpenVPP Partnership Claim Draws Urgent Scrutiny appeared on BitcoinEthereumNews.com. The cryptocurrency world is buzzing with a recent controversy surrounding a bold OpenVPP partnership claim. This week, OpenVPP (OVPP) announced what it presented as a significant collaboration with the U.S. government in the innovative field of energy tokenization. However, this claim quickly drew the sharp eye of on-chain analyst ZachXBT, who highlighted a swift and official rebuttal that has sent ripples through the digital asset community. What Sparked the OpenVPP Partnership Claim Controversy? The core of the issue revolves around OpenVPP’s assertion of a U.S. government partnership. This kind of collaboration would typically be a monumental endorsement for any private cryptocurrency project, especially given the current regulatory climate. Such a partnership could signify a new era of mainstream adoption and legitimacy for energy tokenization initiatives. OpenVPP initially claimed cooperation with the U.S. government. This alleged partnership was said to be in the domain of energy tokenization. The announcement generated considerable interest and discussion online. ZachXBT, known for his diligent on-chain investigations, was quick to flag the development. He brought attention to the fact that U.S. Securities and Exchange Commission (SEC) Commissioner Hester Peirce had directly addressed the OpenVPP partnership claim. Her response, delivered within hours, was unequivocal and starkly contradicted OpenVPP’s narrative. How Did Regulatory Authorities Respond to the OpenVPP Partnership Claim? Commissioner Hester Peirce’s statement was a crucial turning point in this unfolding story. She clearly stated that the SEC, as an agency, does not engage in partnerships with private cryptocurrency projects. This response effectively dismantled the credibility of OpenVPP’s initial announcement regarding their supposed government collaboration. Peirce’s swift clarification underscores a fundamental principle of regulatory bodies: maintaining impartiality and avoiding endorsements of private entities. Her statement serves as a vital reminder to the crypto community about the official stance of government agencies concerning private ventures. Moreover, ZachXBT’s analysis…
Share
BitcoinEthereumNews2025/09/18 02:13
Tom Lee Predicts Major Bitcoin Adoption Surge

Tom Lee Predicts Major Bitcoin Adoption Surge

The post Tom Lee Predicts Major Bitcoin Adoption Surge appeared on BitcoinEthereumNews.com. Key Points: Tom Lee suggests significant future Bitcoin adoption. Potential 200x increase in Bitcoin adoption forecast. Ethereum positioned as key settlement layer for tokenization. Tom Lee, co-founder of Fundstrat Global Advisors, predicted at Binance Blockchain Week that Bitcoin adoption could surge 200-fold amid shifts in institutional and retirement capital allocations. This outlook suggests a potential major restructuring of financial ecosystems, boosting Bitcoin and Ethereum as core assets, with tokenization poised to reshape markets significantly. Tom Lee Projects 200x Bitcoin Adoption Increase Tom Lee, known for his bullish stance on digital assets, suggested that Bitcoin might experience a 200 times adoption growth as more traditional retirement accounts transition to Bitcoin holdings. He predicts a break from Bitcoin’s traditional four-year cycle. Despite a market slowdown, Lee sees tokenization as a key trend with Wall Street eyeing on-chain financial products. The immediate implications suggest significant structural changes in digital finance. Lee highlighted that the adoption of a Bitcoin ETF by BlackRock exemplifies potential shifts in finance. If retirement funds begin reallocating to Bitcoin, it could catalyze substantial growth. Community reactions appear positive, with some experts agreeing that the tokenization of traditional finance is inevitable. Statements from Lee argue that Ethereum’s role in this transformation is crucial, resonating with broader positive sentiment from institutional and retail investors. As Lee explained, “2025 is the year of tokenization,” highlighting U.S. policy shifts and stablecoin volumes as key components of a bullish outlook. source Bitcoin, Ethereum, and the Future of Finance Did you know? Tom Lee suggests Bitcoin might deviate from its historical four-year cycle, driven by massive institutional interest and tokenization trends, potentially marking a new era in cryptocurrency adoption. Bitcoin (BTC) trades at $92,567.31, dominating 58.67% of the market. Its market cap stands at $1.85 trillion with a fully diluted market cap of $1.94 trillion.…
Share
BitcoinEthereumNews2025/12/05 10:42
‘Real product market fit’ – Can Chainlink’s ETF moment finally unlock $20?

‘Real product market fit’ – Can Chainlink’s ETF moment finally unlock $20?

The post ‘Real product market fit’ – Can Chainlink’s ETF moment finally unlock $20? appeared on BitcoinEthereumNews.com. Chainlink has officially joined the U.S. Spot ETF club, following Grayscale’s successful debut on the 3rd of December.  The product achieved $13 million in day-one trading volume, significantly lower than the Solana [SOL] and Ripple [XRP], which saw $56 million and $33 million during their respective launches.  However, the Grayscale spot Chainlink [LINK] ETF saw $42 million in inflows during the launch. Reacting to the performance, Bloomberg ETF analyst Eric Balchunas called it “another insta-hit.” “Also $41m in first day flows. Another insta-hit from the crypto world, only dud so far was Doge, but it’s still early.” Source: Bloomberg For his part, James Seyffart, another Bloomberg ETF analyst, said the debut volume was “strong” and “impressive.” He added,  “Chainlink showing that longer tail assets can find success in the ETF wrapper too.” The performance also meant broader market demand for LINK exposure, noted Peter Mintzberg, Grayscale CEO.  Impact on LINK markets Bitwise has also applied for a Spot LINK ETF and could receive the green light to trade soon. That said, LINK’s Open Interest (OI) surged from $194 million to nearly $240 million after the launch.  The surge indicated a surge in speculative interest for the token on the Futures market.  Source: Velo By extension, it also showed bullish sentiment following the debut. On the price charts, LINK rallied 8.6%, extending its weekly recovery to over 20% from around $12 to $15 before easing to $14.4 as of press time. It was still 47% down from the recent peak of $27.  The immediate overheads for bulls were $15 and $16, and clearing them could raise the odds for tagging $20. Especially if the ETF inflows extend.  Source: LINK/USDT, TradingView Assessing Chainlink’s growth Chainlink has grown over the years and has become the top decentralized oracle provider, offering numerous blockchain projects…
Share
BitcoinEthereumNews2025/12/05 10:26