The following error originated from your test code, not from Cypress. > process is not defined


The test runs as expected.
Bundle Cypress tests that use cypress-file-upload using esbuild or webpack >= v5.
The issue is that these bundlers by default do not polyfill node core modules/variables such as process, which the path module used by cypress-file-upload depends on: https://github.com/nodejs/node/blob/6ca785b951979fa3629505653b19d47bf7b9edde/lib/path.js#L50
Cypress: 6.1.0
cypress-file-upload: 5.0.6
esbuild: 0.9.6
Hi @JaydenNavarro-at
Thanks for submitting the issue!
This is something I've been struggling to fix. The idea is – Cypress allows using node.js built-ins inside your custom command, but using any bundler by end user breaks this.
For now I have 2 ideas:
I think going with 2nd option looks more proper from Cypress "mindset", though I am not sure if this even fixes the issue.
To understand your use case better, why exactly you are using a bundler for the tests? How can I replicate this setup?
@abramenal
To understand your use case better, why exactly you are using a bundler for the tests? How can I replicate this setup?
Cypress by default uses the webpack preprocessor to bundle the test file for running in the browser. It only supports Webpack <= 4 so far. By default, Webpack 4 polyfills node core modules.
To replicate this setup, try out this preprocessor in our Cypress project that bundles the code with esbuild: https://github.com/bahmutov/cypress-esbuild-preprocessor
As the community is moving towards Webpack 5 and maybe esbuild, which don't polyfill node core modules by default, sooner or later we will have to fix this issue.
I don't quite understand why a custom plugin is the solution here. But I checked the source code and the only usages of path are two functions: basename and extname, both are fairly straightforward to implement. Would you consider replacing those usages with a custom implementation?
@pyrocat101 thanks for explaining this. I think the easier way then is indeed replacing with custom implementation.
Working on this now.
Released in v5.0.7
Thank you!
Most helpful comment
Released in
v5.0.7