ci: add test configuration files for Playwright and Vitest
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import { defineConfig, devices } from '@playwright/test';
|
||||
|
||||
export default defineConfig({
|
||||
testDir: './src/__tests__/e2e',
|
||||
timeout: 30000,
|
||||
expect: {
|
||||
timeout: 5000
|
||||
},
|
||||
// Run tests sequentially to avoid database conflicts with SQLite
|
||||
fullyParallel: false,
|
||||
// Fail the build on CI if you accidentally left test.only in the source code.
|
||||
forbidOnly: !!process.env.CI,
|
||||
// Retry on CI only.
|
||||
retries: process.env.CI ? 2 : 0,
|
||||
// Always run with 1 worker to avoid database conflicts with SQLite
|
||||
workers: 1,
|
||||
// Reporter to use
|
||||
reporter: 'html',
|
||||
// Global setup and teardown
|
||||
globalSetup: require.resolve('./src/__tests__/e2e/global.setup'),
|
||||
// Use base URL for relative navigation
|
||||
use: {
|
||||
baseURL: 'http://localhost:3000',
|
||||
// Collect trace when retrying the failed test.
|
||||
trace: 'on-first-retry',
|
||||
// Capture screenshot only on failure
|
||||
screenshot: 'only-on-failure',
|
||||
},
|
||||
// Configure projects
|
||||
projects: [
|
||||
// Setup project - runs before all other projects
|
||||
{
|
||||
name: 'setup',
|
||||
testMatch: /global\.setup\.ts/,
|
||||
},
|
||||
// Main Chromium project with regular user authentication
|
||||
{
|
||||
name: 'chromium',
|
||||
use: {
|
||||
...devices['Desktop Chrome'],
|
||||
// Use prepared auth state for regular user tests
|
||||
storageState: 'playwright/.auth/user.json',
|
||||
},
|
||||
dependencies: ['setup'],
|
||||
},
|
||||
// Admin user project
|
||||
{
|
||||
name: 'chromium-admin',
|
||||
use: {
|
||||
...devices['Desktop Chrome'],
|
||||
// Use prepared auth state for admin tests
|
||||
storageState: 'playwright/.auth/admin.json',
|
||||
},
|
||||
dependencies: ['setup'],
|
||||
},
|
||||
// Unauthenticated project - for tests that don't require login
|
||||
{
|
||||
name: 'chromium-unauth',
|
||||
use: {
|
||||
...devices['Desktop Chrome'],
|
||||
// No authentication state
|
||||
storageState: undefined,
|
||||
},
|
||||
dependencies: ['setup'],
|
||||
},
|
||||
],
|
||||
// Run your local dev server before starting the tests
|
||||
webServer: {
|
||||
command: 'npm run dev',
|
||||
url: 'http://localhost:3000',
|
||||
timeout: 120000,
|
||||
reuseExistingServer: !process.env.CI,
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,18 @@
|
||||
import { defineConfig } from 'vitest/config'
|
||||
import react from '@vitejs/plugin-react'
|
||||
import path from 'path'
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
test: {
|
||||
environment: 'jsdom',
|
||||
setupFiles: ['./vitest.setup.ts'],
|
||||
globals: true,
|
||||
exclude: ['**/e2e/**', '**/node_modules/**'],
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': path.resolve(__dirname, './src'),
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1 @@
|
||||
import '@testing-library/jest-dom'
|
||||
Reference in New Issue
Block a user