You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte/vitest.config.js

90 lines
2.7 KiB

import * as fs from 'node:fs';
import * as path from 'node:path';
import { configDefaults, defineConfig } from 'vitest/config';
const pkg = JSON.parse(fs.readFileSync('packages/svelte/package.json', 'utf8'));
/**
* Resolves `svelte` / `svelte/*` imports against the package's `exports` map.
*
* @param {boolean} force_server When `true`, always resolve to the server
* (`default`) condition. This is used by the `custom-renderer-server` project
* to simulate running in Node *without* the `custom-renderer`/`browser`
* resolve condition. Otherwise the client (`browser`) build is preferred,
* except for compiled SSR output (`_output/server`).
*/
function svelte_alias(force_server = false) {
return [
{
find: /^svelte\/?/,
/**
* @param {string} id
* @param {string | undefined} importer
*/
customResolver: (id, importer) => {
// For some reason this turns up as "undefined" instead of "svelte/"
const exported = pkg.exports[id === 'undefined' ? '.' : id.replace('undefined', './')];
if (!exported) return;
// When running the server version of the Svelte files,
// we also want to use the server export of the Svelte package
const use_server = force_server || importer?.includes('_output/server');
return path.resolve(
'packages/svelte',
use_server ? exported.default : exported.browser ?? exported.default
);
}
}
];
}
export default defineConfig({
test: {
dir: '.',
reporters: ['dot'],
// A handful of dev-mode tests trigger Svelte's `effect_update_depth_exceeded`
// guard, which involves ~1000 Error objects per flush for stack tracking —
// slow enough under vitest 4's deeper async stacks (and CI's slower workers)
// to overrun the 5s default.
testTimeout: 30_000,
coverage: {
provider: 'v8',
reporter: ['lcov', 'html'],
include: ['packages/svelte/src/**'],
reportsDirectory: 'coverage',
reportOnFailure: true
},
projects: [
{
extends: true,
resolve: { alias: svelte_alias() },
test: {
name: 'svelte',
include: [
'packages/svelte/**/*.test.ts',
'packages/svelte/tests/*/test.ts',
'packages/svelte/tests/runtime-browser/test-ssr.ts'
],
exclude: [
...configDefaults.exclude,
'**/samples/**',
// runs in its own project with the server resolve condition
'packages/svelte/tests/custom-renderers-server/**'
]
}
},
{
extends: true,
// resolve `svelte` as if no `custom-renderer`/`browser` condition was set
resolve: { alias: svelte_alias(true) },
test: {
name: { label: 'custom-renderer-server', color: 'red' },
environment: 'node',
include: ['packages/svelte/tests/custom-renderers-server/test.ts']
}
}
]
}
});