-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support vite v5 for component testing #28347
Comments
|
The examples in cypress-io/component-testing-quickstart-apps are left using vite@4.5.1 until this enhancement request is addressed. |
I'm currently experiencing issues with component testing when trying Vite 5.0.7 with Cypress 13.6.1. It looks like 'public' folder mapping is broken which (for me anyway) breaks the use of mock service worker amongst other things. Is this likely to be fixed by the work mentioned in this ticket or would you like a new issue raised? |
Same. |
Did you try using the latest Vite version v5.0.10? |
Yep. |
|
Just tried again with the latest versions of Cypress (13.6.2) and Vite (5.0.10) and I'm still seeing the same issue. |
public folder mapping has had a small change in vite 5. In aligning dev and preview behaviour vite 5 now returns the |
Yes, I noticed that in the release notes. I think the code that needs to change is part of the Cypress Vite dev server integration - I couldn't see any way of doing this from the consumer side. My app works fine in Vite dev mode (with Vite 5), it only fails when running Cypress component tests. |
Same. Imports works fine in the app with Vite 5, but it fails when running Cypress. Changing a path from |
We'd be open to a PR to help support Vite 5. |
Just for the sake of clarity, since I'm the author of this issue, I'm not able to provide a PR to update Cypress for Vite 5 compatibility. I don't have the skills to do this. |
Giving the hefty sums Cypress charges for their service, asking the community to implement support for the latest version of industry-standard tooling, while ignoring the issue for over four month, seems like pretty bad optics. I understand Cypress itself is free and open source, but the lack of Vite 5 support is a road block for Cypress-only users as well as Cypress cloud customers. |
I agree on what @essenmitsosse says. Vite 5 is released for a while now. We are currently migrating our whole stack to Vue 3, including Vuetify 3 and the latest Vite version. I do not understand why the Cypress org does not see their responsibility in keeping their tooling up-to-date. |
I've found a fix for the MSW issue :) I already had a section in my component.js that was configuring the MSW service worker, this also allows you to specify the URL of the worker so I changed it to this:
The key bit is the This fixes MSW, but it won't fix anything else being served from the 'public' directory so it would be good if Cypress could figure out how to handle this in a more generic fashion. |
See #28347 (comment) - it looks like 13.9.0 might fix this |
This did not make it into |
Glad you found a work around for this @rstoneIDBS . I'm currently trying to look into the public path issues but I am a bit stuck. The thread above mentions the fallback behavior to index.html and aligning html preview behavior, but the later only applies to html files. I'm struggling to recreate the public path issues at a very basic level since I can see assets still being served from the cypress public path Pardon my ignorance, but what is it that I am missing? Would either you, @juliandreas , or anyone really, be able to help me reproduce the public path issues so I can work on getting this supported? |
In you example above, change line 13 of App.jsx from: |
I appreciate the help! I was able to reproduce the problem on my end. Replacing the |
I think there might be a way of letting Vite know about additional public directories which I think is what you want to do here - i.e. tell Vite that '/__cypress/src/' is also a public folder. This was where I got to when looking at it before but I couldn't figure out how to configure that part of Vite from the Cypress code that starts the Vite dev server. Edit: You might need to look at this vitejs/vite#5129 |
I think this actually requires the assets in the specified directories to be on disk. I am wondering if we can accomplish the same thing with a simple proxy?
Though I would think you might want the ability to turn this off, especially if your server has more complex middleware and is spoofing an api server, so I don't think this is an ideal/perfect solution by any means. We might be able to narrow it down to just assets |
This is a bit of a smell to me. @rstoneIDBS out of curiousity have you tried setting the cypress.config.jsexport default defineConfig({
e2e: {
setupNodeEvents(on, config) {
// implement node event listeners here
},
},
component: {
devServer: {
framework: "react",
bundler: "vite",
},
devServerPublicPathRoute: '',
},
}); |
@AtofStryker setting
|
@rstoneIDBS I'm struggling to reproduce this error. Are you able to share a reproduction? Also, are you on Windows or running an ESM project? |
@AtofStryker all I did was:
Modified the I'm using Windows and the default Vite project is ESM |
Interesting I did the identical steps and everything works fine. The main difference is that I am not on Windows and am on MacOS 14.3. I bet this is some type of pathing issue specific to Windows. Will try the same steps as well but on Windows. |
@rstoneIDBS After investigating it does look like a pathing issue. Hardcoding some values inside |
@rstoneIDBS are you able to try the binary for windows on this commit ac6e96d? |
Just tried it with my test case (mentioned above) and with my real code (using MSW) and it appears to be working fine :) Thanks @AtofStryker I guess the Cypress documentation will be updated to mention this - I can imagine others running into it and the solution (devServerPublicPathRoute) isn't obvious so making this discoverable is going to be a challenge. |
@rstoneIDBS glad it works!
This is the tricky part. We don't have a lot of documentation on our bundler dev-servers, but I did add a snippet into the package readme https://github.com/cypress-io/cypress/pull/29518/files#diff-07cdfa8a3a7320f94daa82c1155a2c8de98dc257e0749be5a72dd6789fdfed06R59. Discoverability here is difficult, but it at least gives us something to reference. |
Released in This comment thread has been locked. If you are still experiencing this issue after upgrading to |
What would you like?
Cypress component testing should support vite v5 (React, Vue and Svelte) - see announcement Vite 5.0 is out! Nov 16, 2023.
Why is this needed?
According to https://docs.cypress.io/guides/component-testing/overview "Vite 2+" is supported, however in practice only up to Vite
v4
is supported by Cypress13.x
at this time.cypress/packages/scaffold-config/src/dependencies.ts
Lines 73 to 80 in ab60af8
Other
See Migration from (vite) v4 and note that the CJS Node API has been deprecated.
The text was updated successfully, but these errors were encountered: