Skip to main content
Learn about Sonamu’s test database system and how to configure it.

Test DB Overview

Isolated Environment

Separate from production Safe testing

Auto Rollback

Transaction-based Auto cleanup after tests

Fixture Support

Copy real data Consistent test environment

Easy Initialization

Single command setup Auto schema copy

DB Structure

Sonamu uses multiple databases: Roles:
  • development: DB used during development
  • fixture: Stores common data for testing (team shareable)
  • test: DB where actual tests run (transaction-based)

DB Configuration

sonamu.config.json

Warning:
  • test and production must never use the same DB
  • Sonamu automatically validates this during initialization

Fixture Initialization

pnpm sonamu fixture init

Copies the development DB schema to Fixture DB and Test DB.
Process:
  1. Development DB Dump
  2. Create Fixture DB
  3. Create Test DB
Result:
  • Fixture DB: Empty schema (add data later)
  • Test DB: Empty schema (sync from Fixture per test)

Execution Example

Skip Condition

Skips Test DB creation if Fixture DB and Test DB are the same:

Test DB Operation

Transaction-Based

Each test runs in an isolated Transaction:
Flow:

Benefits

Isolation:
Fast execution:
  • No actual DELETE → just ROLLBACK
  • Saves DB cleanup time

Best Practices

1. DB Separation

2. Shared Fixture DB

Team can maintain consistent test environment by using the same Fixture DB:

3. Regular Initialization

Re-initialize Fixture when schema changes:

Troubleshooting

Connection Failed

Solution:
  • Check if PostgreSQL server is running
  • Verify connection info in sonamu.config.json

Permission Error

Solution:

DB Already Exists

Solution:

Cautions

Cautions when using test DB: 1. Never use production DB: test DB must be completely separate from production 2. Schema sync: Run fixture init after migrations 3. Transaction-based: Isolation between tests is handled automatically 4. Shared Fixture: Recommend using same Fixture DB with team 5. Regular initialization: Re-initialize when dev DB schema changes

Next Steps

Creating Fixtures

Writing fixture.ts

Loading Fixtures

Import production data

Syncing Fixtures

Fixture → Test DB

Writing Tests

Understanding test structure