Debugging Cypress tests in Visual Studio Code
@fhilton's answer used to work, but with newer versions of Cypress, it will cause Chrome to not be able to connect to the test runner and not run any tests. Use this instead:
If you or any of your co-workers develop in Windows, run
npm i -D cross-env
.In package.json add a script to start the Cypress test runner (or if you already have a script that says something like
cypress open
then just modify that). You want the script to set theCYPRESS_REMOTE_DEBUGGING_PORT
environment variable to something like9222
before it runscypress open
. Since I use Windows, I use thecross-env
npm package to set environment variables. Therefore, the script in my package.json looks like"scripts": { "cypr": "cross-env CYPRESS_REMOTE_DEBUGGING_PORT=9222 cypress open", },
I got the idea of doing that from here and here. The rest of this answer is mostly what @fhilton wrote in his answer so most of the credit goes to them.
Add the following to the list of
configurations
in your launch.json (note the same port as above){ "type": "chrome", "request": "attach", "name": "Attach to Cypress Chrome", "port": 9222, "urlFilter": "http://localhost*", "webRoot": "${workspaceFolder}", "sourceMaps": true, "skipFiles": [ "cypress_runner.js", ], },
Put the word
debugger
in your test. See Cypress Doc on debugging. Or, if you are confident in your source maps, put a breakpoint in your code with vscode.Run
npm run cypr
(or whatever you called your npm script)From the Cypress test runner, start your tests running in Chrome
Start the vscode debugger with your new "Attach to Cypress Chrome" configuration
Restart the test with breakpoint in it and debug away!
I set this up today and it worked!
- Modify plugins/index.js to launch Chrome in debug mode (--remote-debugging-port=9222):
module.exports = (on, config) => {
on('before:browser:launch', (browser = {}, args) => {
if (browser.name === 'chrome') {
args.push('--remote-debugging-port=9222')
// whatever you return here becomes the new args
return args
}
})
}
Cypress Browser Launch API
- Add the following to your launch.json (note the same port as above)
{
"type": "chrome",
"request": "attach",
"name": "Attach to Chrome",
"port": 9222,
"urlFilter": "http://localhost:4200/*",
"webRoot": "${workspaceFolder}"
}
- Put the word "debugger" in your test. See Cypress Doc on debugging
- Run "cypress open" and launch the test from #3 in Chrome
- Start the vscode debugger with your new "Attach to Chrome" configuration
- Restart the test with "debugger" in it and debug away!