diff --git a/VITEST.md b/VITEST.md new file mode 100644 index 0000000..77a0518 --- /dev/null +++ b/VITEST.md @@ -0,0 +1 @@ +time TEST_RUNNER_PATH="node_modules/.bin/vitest" TEST_RUNNER_ARGS="--poolOptions.threads.singleThread=true --maxConcurrency=1 --watch=false --pool=threads" yarn reassure --verbose diff --git a/examples/web-vite/src/TestList.tsx b/examples/web-vite/src/TestList.tsx index 8671067..23e1df3 100644 --- a/examples/web-vite/src/TestList.tsx +++ b/examples/web-vite/src/TestList.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface TestListProps { count: number; } @@ -19,11 +21,11 @@ interface ListItemProps { } const ListItem = ({ title }: ListItemProps) => { - // Uncomment to introduce a performance issue - // const [, forceRender] = React.useState(); - // React.useEffect(() => { - // forceRender({}); - // }, [title]); + // Intentionally causing an extra re-render + const [, forceRender] = React.useState(); + React.useEffect(() => { + forceRender({}); + }, [title]); return (
diff --git a/examples/web-vite/test-setup.ts b/examples/web-vite/test-setup.ts new file mode 100644 index 0000000..66eef4d --- /dev/null +++ b/examples/web-vite/test-setup.ts @@ -0,0 +1,6 @@ +import { afterEach } from 'vitest'; +import { cleanup } from '@testing-library/react'; + +afterEach(() => { + cleanup(); +}); diff --git a/examples/web-vite/vite.config.ts b/examples/web-vite/vite.config.ts index 5a33944..900c667 100644 --- a/examples/web-vite/vite.config.ts +++ b/examples/web-vite/vite.config.ts @@ -1,7 +1,27 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; // https://vitejs.dev/config/ export default defineConfig({ plugins: [react()], -}) + test: { + workspace: [ + { + test: { + name: 'test', + include: ['**/__tests__/*.{ts,js}', '**/*.test.{ts,tsx,js,jsx}'], + environment: 'jsdom', + }, + }, + { + test: { + name: 'perf', + include: ['**/__perf__/*.{ts,js}', '**/*.perf.{ts,tsx,js,jsx}'], + environment: 'jsdom', + }, + }, + ], + environment: 'jsdom', // Use jsdom for DOM-related tests + setupFiles: ['./test-setup.ts'], + }, +});