162 lines
3.9 KiB
Markdown
162 lines
3.9 KiB
Markdown
# Vitest Migration Summary
|
|
|
|
## Overview
|
|
|
|
Successfully migrated the test suite from Node.js built-in test runner to Vitest with global setup/teardown for database initialization.
|
|
|
|
## Changes Made
|
|
|
|
### 1. Dependencies Added
|
|
|
|
```bash
|
|
pnpm add -D vitest@latest @vitest/ui@latest
|
|
```
|
|
|
|
- **vitest**: Modern test runner with better DX
|
|
- **@vitest/ui**: Visual test runner UI
|
|
|
|
### 2. Configuration Files Created
|
|
|
|
#### `vitest.config.ts`
|
|
- Test environment: Node.js
|
|
- Global setup/teardown hooks configured
|
|
- Test files: `src/__tests__/**/*.test.ts`
|
|
- Single fork mode for consistency
|
|
- Timeout: 30s per test, 60s per hook
|
|
|
|
#### `src/__tests__/globalSetup.ts`
|
|
- Exports `setup()` function that runs once before all tests
|
|
- Creates test database and users
|
|
- Generates access tokens
|
|
- Exports `teardown()` function that runs once after all tests
|
|
- Cleans up all test data
|
|
|
|
#### `src/__tests__/setup.ts`
|
|
- Per-test-file setup (currently minimal)
|
|
- Can be extended for per-file setup needs
|
|
|
|
### 3. Test Files Converted
|
|
|
|
All test files migrated from Node.js test API to Vitest API:
|
|
|
|
#### Import Changes
|
|
```typescript
|
|
// Before
|
|
import assert from "node:assert/strict";
|
|
import { describe, it } from "node:test";
|
|
|
|
// After
|
|
import { describe, it, expect } from "vitest";
|
|
```
|
|
|
|
#### Assertion Changes
|
|
```typescript
|
|
// Before
|
|
assert.strictEqual(actual, expected);
|
|
assert.ok(value);
|
|
|
|
// After
|
|
expect(actual).toBe(expected);
|
|
expect(value).toBeTruthy();
|
|
```
|
|
|
|
#### Files Converted (14 files)
|
|
- `auth/auth.test.ts`
|
|
- `auth/maybeAuth.test.ts`
|
|
- `middlewares/middlewares.test.ts`
|
|
- `routes/user.test.ts`
|
|
- `routes/stripe.test.ts`
|
|
- `routes/tablo.test.ts`
|
|
- `routes/tasks.test.ts`
|
|
- `routes/public.test.ts`
|
|
- `routes/invite.test.ts`
|
|
- `routes/tablo_data.test.ts`
|
|
- `routes/notes.test.ts`
|
|
- `helpers/auth.test.ts`
|
|
- `helpers/uriComponent.test.ts`
|
|
- `helpers/slots.test.ts`
|
|
|
|
### 4. Package.json Scripts Updated
|
|
|
|
```json
|
|
{
|
|
"test": "NODE_ENV=test vitest run",
|
|
"test:watch": "NODE_ENV=test vitest",
|
|
"test:ui": "NODE_ENV=test vitest --ui"
|
|
}
|
|
```
|
|
|
|
## Benefits of Vitest
|
|
|
|
1. **Better Global Setup**: Proper global setup/teardown hooks that run once for entire test suite
|
|
2. **Faster Test Runs**: Smart test running with better parallelization
|
|
3. **Better DX**:
|
|
- Instant feedback with watch mode
|
|
- Visual UI for debugging tests
|
|
- Better error messages
|
|
4. **Modern API**: Expect-style assertions that are more readable
|
|
5. **Vite Integration**: Can leverage Vite's module resolution if needed
|
|
|
|
## Test Database Setup
|
|
|
|
The global setup now properly:
|
|
1. Creates 3 test users before any tests run
|
|
2. Populates all main database tables with test data
|
|
3. Generates access tokens for each user
|
|
4. Makes test data available via `testUtils`
|
|
5. Cleans up everything after all tests complete
|
|
|
|
## Running Tests
|
|
|
|
```bash
|
|
# Run all tests once
|
|
npm test
|
|
|
|
# Watch mode - re-runs on changes
|
|
npm run test:watch
|
|
|
|
# Visual UI
|
|
npm run test:ui
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
To run tests successfully, ensure:
|
|
|
|
1. **Supabase is running**: `supabase start`
|
|
2. **Environment variables** are set in `.env.test`:
|
|
- `SUPABASE_URL`
|
|
- `SUPABASE_SERVICE_ROLE_KEY`
|
|
- `SUPABASE_CONNECTION_STRING`
|
|
- Other required env vars
|
|
|
|
3. **Database schema** is up to date:
|
|
```bash
|
|
supabase db reset
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "Invalid API key" error
|
|
- Check `.env.test` has correct `SUPABASE_SERVICE_ROLE_KEY`
|
|
- Ensure Supabase local is running
|
|
- Verify `SUPABASE_URL` points to the correct instance
|
|
|
|
### Test data not available
|
|
- Check that global setup completed successfully
|
|
- Look for errors in the global setup output
|
|
- Verify database connection is working
|
|
|
|
### Tests failing after migration
|
|
- Check assertion syntax has been converted correctly
|
|
- Verify imports use Vitest instead of Node test
|
|
- Look for async/await issues in test setup
|
|
|
|
## Documentation
|
|
|
|
See `src/__tests__/README.md` for detailed documentation on:
|
|
- Test data structure
|
|
- How to use test utilities
|
|
- Example test patterns
|
|
- File organization
|
|
|