Switch from Jest to Node.js's Native Test Runner
This issue about moving away from Jest to Node.js's Native Test Runner
Why
It would be great if we adopted Node.js's Test Runner (and moved away from Jest) because:
- Way less dependencies
- We only need JSDom to be set before the tests start running
- https://github.com/nodejs/nodejs.org/blob/main/jest.setup.mjs
- We can remove all the reporters/coverage generators and other dependencies
- We only need JSDom to be set before the tests start running
- It's way faster and native to Node.js
- It's natively ESM compatible which Jest isn't
- We don't need snapshots nor any fancy Jest functionality
Migration
- We still generate JUnit Test Reports for our GitHub Action
- https://nodejs.org/api/test.html#test-reporters
- Mocking of Modules cannot be done on "module name mapping" (https://github.com/nodejs/nodejs.org/blob/main/jest.config.mjs#L15-L17)
- Meaning the mocks we have on
__mocks__folders need to be manually imported when used and need to be changed to use the Mocking API https://nodejs.org/api/test.html#mocking
- Meaning the mocks we have on
- Any usage of
jest.APIs need to be replaced to Node Test Runners APIs- https://nodejs.org/api/test.html
- Any usage of
expectneeds to be changed toassert(https://nodejs.org/api/assert.html) - Some pieces of code/tests might also need to be changed
This issue is open to grabs by anyone interested :)
Hey ! I'm trying to work on this but I got a problem. It's because node doesn't found ts file. So should we build ts before test ?
Hey ! I'm trying to work on this but I got a problem. It's because node doesn't found ts file. So should we build ts before test ?
No. You want to use node --loader=ts-node/esm
Node.js supports custom loaders. (You need to add ts-node as a dev dependency btw)
Or if you also need react compatibility. You might want to use the tsx loader (also a package)
hummm interessing
Have you considered ditching JSDOM + RTL in favor of Cypress/Playwright Component Testing?
Have you considered ditching JSDOM + RTL in favor of Cypress/Playwright Component Testing?
We already have Visual Regression Testing. The only tests we have for Components at the moment are for specific states.
And no, we dont want yet another tool and library and platform. Thank you.
To clarify, our testing of components here is really bare bones, just to certify that for example, a select actually renders said items.
Adding browser testing (even if headless) is overkill for our needs.
So pretty much Node.js itself provides everything we need here with its native test runner; + we only want to unit test utilities, helpers, hooks and certain components that are stateful.
Everything else is already covered by Chromatic + Storybook
@AugustinMauroy are you still working on this?
@araujogui I'm stuck in my pr with the dom. If you want you can commit on my pr it is in "allow edit by maintainer" so in theory you could commit. It's up to you to finish it 😁
@AugustinMauroy can you share the link on PR?
its linked above https://github.com/nodejs/nodejs.org/pull/6129
I would like to contribute (first time to this repo, Hello 👋🏻), but I can't see the PR @AugustinMauroy. Can you share the link so maybe I can run it locally and potentially review it to start familiarising myself with the code?
I didn't make any pr for moment. But you can try on this branch any feedback is welcome