Setting up Cypress with Next.js
Learn how to set up Cypress with Next.js for End-to-End (E2E) and Component Testing.
Cypress is a test runner used for End-to-End (E2E) and Component Testing. This page will show you how to set up Cypress with Next.js and write your first tests.
Warning:
- Cypress versions below 13.6.3 do not support TypeScript version 5 with
moduleResolution:"bundler"
. However, this issue has been resolved in Cypress version 13.6.3 and later. cypress v13.6.3
Quickstart
You can use create-next-app
with the with-cypress example to quickly get started.
Manual setup
To manually set up Cypress, install cypress
as a dev dependency:
Add the Cypress open
command to the package.json
scripts field:
Run Cypress for the first time to open the Cypress testing suite:
You can choose to configure E2E Testing and/or Component Testing. Selecting any of these options will automatically create a cypress.config.js
file and a cypress
folder in your project.
Creating your first Cypress E2E test
Ensure your cypress.config
file has the following configuration:
Then, create two new Next.js files:
Add a test to check your navigation is working correctly:
Running E2E Tests
Cypress will simulate a user navigating your application, this requires your Next.js server to be running. We recommend running your tests against your production code to more closely resemble how your application will behave.
Run npm run build && npm run start
to build your Next.js application, then run npm run cypress:open
in another terminal window to start Cypress and run your E2E Testing suite.
Good to know:
- You can use
cy.visit("/")
instead ofcy.visit("http://localhost:3000/")
by addingbaseUrl: 'http://localhost:3000'
to thecypress.config.js
configuration file. - Alternatively, you can install the
start-server-and-test
package to run the Next.js production server in conjunction with Cypress. After installation, add"test": "start-server-and-test start http://localhost:3000 cypress"
to yourpackage.json
scripts field. Remember to rebuild your application after new changes.
Creating your first Cypress component test
Component tests build and mount a specific component without having to bundle your whole application or start a server.
Select Component Testing in the Cypress app, then select Next.js as your front-end framework. A cypress/component
folder will be created in your project, and a cypress.config.js
file will be updated to enable Component Testing.
Ensure your cypress.config
file has the following configuration:
Assuming the same components from the previous section, add a test to validate a component is rendering the expected output:
Good to know:
- Cypress currently doesn't support Component Testing for
async
Server Components. We recommend using E2E testing. - Since component tests do not require a Next.js server, features like
<Image />
that rely on a server being available may not function out-of-the-box.
Running Component Tests
Run npm run cypress:open
in your terminal to start Cypress and run your Component Testing suite.
Continuous Integration (CI)
In addition to interactive testing, you can also run Cypress headlessly using the cypress run
command, which is better suited for CI environments:
You can learn more about Cypress and Continuous Integration from these resources: