必要なパッケージのインストール
Terminal
pnpm add -D -E vitest @vitest/browser-playwright @vitejs/plugin-react @testing-library/react @testing-library/dom @testing-library/jest-dom @testing-library/user-event vite-tsconfig-paths msw @vitest/coverage-v8 fishery @faker-js/faker設定ファイルの作成
vitest.config.mts
import { defineConfig, defineProject } from 'vitest/config'
import { playwright } from '@vitest/browser-playwright'
import react from '@vitejs/plugin-react'
import tsconfigPaths from 'vite-tsconfig-paths'
export default defineConfig({
test: {
projects: [
defineProject({
test: {
name: 'unit',
include: ['**/__tests__/**/*.unit.{test,spec}.ts'],
environment: 'node',
},
}),
defineProject({
plugins: [tsconfigPaths(), react()],
test: {
name: 'browser',
include: ['**/__tests__/**/*.browser.{test,spec}.ts{,x}'],
setupFiles: ['./vitest.setup.ts'],
browser: {
enabled: true,
provider: playwright(),
headless: true,
instances: [{ browser: 'chromium' }],
},
},
}),
],
},
})vitest.setup.ts
import '@testing-library/jest-dom/vitest'package.json の scripts
package.json の scripts を次のように設定することで便利になります。
package.json
{
"scripts": {
// ...
"test": "vitest",
"test:coverage": "vitest run --coverage",
"test:run": "vitest run"
// ...
},
}playwright のインストール
Playwright の実行に必要なブラウザ本体と依存ライブラリを、以下のコマンドでインストールします。
Terminal
pnpm dlx playwright install --with-depsplaywright のアンインストールをしたい場合
Terminal
pnpm dlx playwright uninstall --all参考
How to set up Vitest with Next.js
Learn how to set up Vitest with Next.js for Unit Testing.
nextjs.org
JSDOMを使ったReact Testing Library等のテストが時代遅れかも知れないので調べてみた
zenn.dev

Why I Won’t Use JSDOM
Explore how JSDOM's browser simulation works, and learn front-end testing approaches using Vitest Browser Mode for direct browser testing and native APIs
www.epicweb.dev

【Next.js × Vitest】Failed to load PostCSS config : [TypeError] Invalid PostCSS Plugin found at: plugins[0]の解決方法 - Qiita
はじめに Next.jsとVitestを使ってテストを実行していた際に発生したエラーについての記事です。 この記事は個人的なアウトプットを目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございま...
qiita.com
![【Next.js × Vitest】Failed to load PostCSS config : [TypeError] Invalid PostCSS Plugin found at: plugins[0]の解決方法 - Qiita](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.1.1%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGMzgzNTIxNyUyRnByb2ZpbGUtaW1hZ2VzJTJGMTcyMTMxNTQ5Mj9peGxpYj1yYi00LjEuMSZhcj0xJTNBMSZmaXQ9Y3JvcCZtYXNrPWVsbGlwc2UmYmc9RkZGRkZGJmZtPXBuZzMyJnM9YjQwZDFmODRjYjYyYjNiNjljNDhkOWY3ZWIyZDI2Y2I%26blend-x%3D120%26blend-y%3D462%26blend-w%3D90%26blend-h%3D90%26blend-mode%3Dnormal%26mark64%3DaHR0cHM6Ly9xaWl0YS1vcmdhbml6YXRpb24taW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1vcmdhbml6YXRpb24taW1hZ2UlMkZkYjQ2NGVlODMyZjg4MDZhNWY4OWU5NGI0NDZjNzJmYTNkZjNhMzhjJTJGb3JpZ2luYWwuanBnJTNGMTcxMjU0NjM1Nj9peGxpYj1yYi00LjEuMSZ3PTQ0Jmg9NDQmZml0PWNyb3AmbWFzaz1jb3JuZXJzJmNvcm5lci1yYWRpdXM9OCZiZz1GRkZGRkYmYm9yZGVyPTIlMkNGRkZGRkYmZm09cG5nMzImcz03YjBlOGQ0ZmYzNGY4MzNlNjJiYWIwYTc5ZjU2OGU0Mw%26mark-x%3D186%26mark-y%3D515%26mark-w%3D40%26mark-h%3D40%26s%3Da804c1889b3ae1aed03df348bfc03eaf?ixlib=rb-4.1.1&w=1200&fm=jpg&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTk2MCZoPTMyNCZ0eHQ9JUUzJTgwJTkwTmV4dC5qcyUyMCVDMyU5NyUyMFZpdGVzdCVFMyU4MCU5MUZhaWxlZCUyMHRvJTIwbG9hZCUyMFBvc3RDU1MlMjBjb25maWclMjAlM0ElMjAlNUJUeXBlRXJyb3IlNUQlMjBJbnZhbGlkJTIwUG9zdENTUyUyMFBsdWdpbiUyMGZvdW4lRTIlODAlQTYmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz0zNmZmNDFlZTUzNDMzYzhhMTNhMDM4OTEyNWQ2MDY1Nw&mark-x=120&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjEuMSZ3PTgzOCZoPTU4JnR4dD0lNDBtYXNhZnVtaTEwNzMmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz1mZGEzYTFiNmQ3ZGEwYzEwNDU0OTM5YjM3NjdiMDYwOA&blend-x=242&blend-y=454&blend-w=838&blend-h=46&blend-fit=crop&blend-crop=left%2Cbottom&blend-mode=normal&txt64=SklTT1UgfCDjg5fjg63jgrDjg6njg5_jg7PjgrDjgrPjg7zjg4Hjg7PjgrA&txt-x=242&txt-y=539&txt-width=838&txt-clip=end%2Cellipsis&txt-color=%231E2121&txt-font=Hiragino%20Sans%20W6&txt-size=28&s=2b5c682c6468a30b40fcff900f686b10)