Breaking Changes
AVA now expects Node.js 22.20, 24.12 or newer.
Internally AVA is now fully ESM. This is possible now that Node.js supports loading ES modules using require() calls and simplifies AVA's types and internals.
If you use AVA from a CommonJS project you'll have to update your imports:
-const test = require('ava');
+const {default: test} = require('ava');We expect an increasing number of projects to be ESM only. As per the above, CommonJS is still supported, but we don't expect cjs extensions to be used. The default file extensions are now js and mjs. Specify extensions: ['cjs', 'js', 'mjs'] for AVA to run test files with the cjs extension.
All test files (and those loaded through AVA's require config) are now loaded via import(). Use customization hooks for transpilation. The object form of the extensions configuration is no longer supported.
If you use AVA with @ava/typescript you must upgrade that package to v7.
New Features
There's two new test modifiers courtesy of @sindresorhus: test.skipIf() to skip a test based on a runtime condition. test.runIf() is the inverse: the test only runs when the condition is true.
test.skipIf(process.platform === 'win32')('not on Windows', t => {
t.pass();
});
test.runIf(process.platform === 'linux')('Linux only', t => {
t.pass();
});These work with other modifiers like .serial and .failing:
test.serial.skipIf(process.platform === 'win32')('serial, not on Windows', t => {
t.pass();
});
test.failing.skipIf(process.platform === 'win32')('expected failure, not on Windows', t => {
t.fail();
});Other Changes
- Watch mode now ignores changes to
*.tsbuildinfofiles - TAP reporter is more defensive when restoring the original error name, thanks to @ninper00 in #3415
- Reported errors when
throwsAsync/notThrowsAsyncare not awaited have been improved by @sindresorhus in #3436
New Contributors
Full Changelog: v7.0.0...v8.0.0