testing
Original:🇺🇸 English
Translated
Testing guide using Vitest. Use when writing tests (.test.ts, .test.tsx), fixing failing tests, improving test coverage, or debugging test issues. Triggers on test creation, test debugging, mock setup, or test-related questions.
4installs
Sourcelobehub/lobehub
Added on
NPX Install
npx skill4agent add lobehub/lobehub testingTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →LobeChat Testing Guide
Quick Reference
Commands:
bash
# Run specific test file
bunx vitest run --silent='passed-only' '[file-path]'
# Database package (client)
cd packages/database && bunx vitest run --silent='passed-only' '[file]'
# Database package (server)
cd packages/database && TEST_SERVER_DB=1 bunx vitest run --silent='passed-only' '[file]'Never run - it runs all 3000+ tests (~10 minutes).
bun run testTest Categories
| Category | Location | Config |
|---|---|---|
| Webapp | | |
| Packages | | |
| Desktop | | |
Core Principles
- Prefer over
vi.spyOn- More targeted, easier to maintainvi.mock - Tests must pass type check - Run after writing tests
bun run type-check - After 1-2 failed fix attempts, stop and ask for help
- Test behavior, not implementation details
Basic Test Structure
typescript
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
beforeEach(() => {
vi.clearAllMocks();
});
afterEach(() => {
vi.restoreAllMocks();
});
describe('ModuleName', () => {
describe('functionName', () => {
it('should handle normal case', () => {
// Arrange → Act → Assert
});
});
});Mock Patterns
typescript
// ✅ Spy on direct dependencies
vi.spyOn(messageService, 'createMessage').mockResolvedValue('id');
// ✅ Use vi.stubGlobal for browser APIs
vi.stubGlobal('Image', mockImage);
vi.spyOn(URL, 'createObjectURL').mockReturnValue('blob:mock');
// ❌ Avoid mocking entire modules globally
vi.mock('@/services/chat'); // Too broadDetailed Guides
See for specific testing scenarios:
references/- Database Model testing:
references/db-model-test.md - Electron IPC testing:
references/electron-ipc-test.md - Zustand Store Action testing:
references/zustand-store-action-test.md - Agent Runtime E2E testing:
references/agent-runtime-e2e.md - Desktop Controller testing:
references/desktop-controller-test.md
Common Issues
- Module pollution: Use when tests fail mysteriously
vi.resetModules() - Mock not working: Check setup position and use in beforeEach
vi.clearAllMocks() - Test data pollution: Clean database state in beforeEach/afterEach
- Async issues: Wrap state changes in for React hooks
act()