Run Jest on Native ES Modules
Here's how to run your tests on ES modules without compiling.
Mark Project as an ES Module
To be a real ES module, you really have to want it. More than Pinnochio. Don't get distracted by Pleasure Island. Get to work. Save your father.
And on your way, edit your package.json
to show that you are a real ES module:
{
"type": "module"
}
Write Source
Something simple will do in index.js
:
export function add(a, b) {
return a + b
}
See, native ESM. We're exporting. It's a .js
file.
Write Test
Again, we're just testing.
import { add } from './index.js'
test('works', () => {
expect(add(1, 2)).toEqual(3)
})
Native ES module import.
Install Jest
npm install jest
Now you have a test runner.
Run the Test
For some reason this still requires an experimental flag (even tested on nodejs@20.2.0 this morning).
Modify your package.json
again so you don't have to type this every time:
{
"scripts": {
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
}
}
Run it, and see the output:
> npm test
PASS src/index.test.js
✓ works (1 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.238 s
Ran all test suites.
``
Just JavaScript. Just ESM. No compile. Fast, simple, tested.