Database Testing
Database-backed procedures need tests that run against a real database to catch query errors, constraint violations, and data integrity issues. This page covers setting up test contexts, writing unit and integration tests for procedures, and cleaning up between test runs.
Test Setup
Section titled “Test Setup”import { setupTestContext } from '@veloxts/core';import { db } from '@/database';
describe('User procedures', () => { beforeEach(async () => { // Clean database before each test await db.user.deleteMany(); });
afterAll(async () => { await db.$disconnect(); });});Testing Procedures
Section titled “Testing Procedures”import { setupTestContext } from '@veloxts/core';import { userProcedures } from '@/procedures/users';
test('createUser creates a user', async () => { const ctx = await setupTestContext();
const result = await userProcedures.procedures.createUser.handler({ input: { name: 'Alice', email: 'alice@example.com' }, ctx, });
expect(result.name).toBe('Alice'); expect(result.id).toBeDefined();});Using Factories
Section titled “Using Factories”import { userFactory } from '@/database/factories';
test('listUsers returns all users', async () => { await userFactory.createMany(5);
const result = await userProcedures.procedures.listUsers.handler({ input: {}, ctx: await setupTestContext(), });
expect(result).toHaveLength(5);});Test Database
Section titled “Test Database”Use a separate test database:
DATABASE_URL="file:./test.db"Related Content
Section titled “Related Content”- Seeding - Test data
- Advanced Testing - More patterns