-
Notifications
You must be signed in to change notification settings - Fork 17
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
Vitest #99
Comments
Hello! I think one of the problems we will encounter, if we were to use esm, is mocking Module methods. As far as I know spec doesn't allow rewriting exported module variables? |
To fix some of the described problems we are thinking to add a loader that will only process aliasing inside
|
It is possible with a loader. See https://dev.to/jakobjingleheimer/custom-esm-loaders-who-what-when-where-why-how-4i1o#all-together-now
Yes, there is a test in node that does this via the globalPreload hook: nodejs/node#39240 |
I don't see how it's possible with provided link? It's not possible to redefine property on
Can you point me to that? Our idea is:
I am struggling with the second one. We have a server in another thread, but I don't see how I can pass down a connection to the loader itself. |
Ah, I think maybe I misunderstood. For that, you'd need to use a dynamic import in your test file before importing the implementation: const Module_mocked = await import('node:module')
.then((original) => {
// do whatever
return {
// your mock here
};
});
const implementationToBeTested = await import('./whatever.mjs')
.then((module) => module.default);
@sheremet-va yes, I just added it to my message as you posted yours 😅 |
In the recent collaborator summit, one thing that many people mentioned as a blocker for ESM migration was Jest support for ESM. I noticed that Vitest claims to be both “Jest compatible” and to have “out-of-the-box ESM” support. I joined their Discord server to ask what was lacking from Node from their perspective, for them to provide as good an experience in ESM as Jest does in CommonJS: https://discord.com/channels/917386801235247114/918057929670811708/998630895110066226. @sheremet-va answered my questions. The issues mentioned were:
Being able to set
--conditions
dynamically at runtime, since Vitest users define these in configuration files (applies to CommonJS too; I encouraged them to open an issue).Spawning workers is slow.
The
node:vm
support for ESM is still experimental. Currently Vitest transpiles code to CommonJS and runs it through the stablevm
API, so they already have a workaround; but presumably it would be nice to not need to transpile if possible. Vitest will always need to do some specifier rewriting as part of its mission (like to do mocks) so it would be only a minor improvement to not need to also convertimport
torequire
.So basically we’re already at parity, though there’s still room for improvement. Regarding the last point, I think Jest currently takes the approach of using the experimental API, which is a pain point for users. If anyone from that team thinks of other issues I’ll update this list.
The text was updated successfully, but these errors were encountered: