Skip to content

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.

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();
});
});
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();
});
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);
});

Use a separate test database:

.env.test
DATABASE_URL="file:./test.db"