Data Factories
Available in: Business, Enterprise tiers
Type-safe builders for realistic mock data with optional Prisma persistence.
Why Use Data Factories
Problem: Creating test data is tedious:
- Manually writing test data for every test
 - Data doesn't match real schema structure
 - Hard to create valid related data
 - No easy way to persist to database
 
Solution: Generate factories that build type-safe test data with realistic values.
Benefits
- Type-Safe: Follows your Prisma schema exactly
 - Realistic Data: Sensible defaults for all fields
 - Relationships: Handle nested data easily
 - Optional Persistence: Build in-memory or save to database
 
Prerequisites
# Core dependencies
pnpm add @prisma/client
# PZG Pro license required
Generate
Add to your schema.prisma:
generator pzgPro {
  provider = "node ./lib/cli/pzg-pro.js"
  output = "./generated/pro"
  enableFactories = true
}
Then run:
prisma generate
Generated Files
generated/
  pro/
    factories/
      factories.ts         # Factory functions for each model
Basic Usage
import { userFactory, postFactory } from '@/generated/pro/factories/factories'
// Build in-memory (no database)
const user = userFactory.build({
  email: 'test@example.com'
})
// Build many
const users = userFactory.buildMany(10)
// With custom values
const admin = userFactory.build({
  email: 'admin@example.com',
  role: 'ADMIN'
})
Persistence (Optional)
When Prisma client is available:
// Create in database
const user = await userFactory.create({
  email: 'db@example.com'
})
// Create many
const users = await userFactory.createMany(5)
// With relationships
const userWithPosts = await userFactory.create({
  posts: {
    create: [
      postFactory.build({ title: 'First Post' }),
      postFactory.build({ title: 'Second Post' })
    ]
  }
})
Testing Example
import { describe, it, expect } from 'vitest'
import { userFactory } from '@/generated/pro/factories/factories'
describe('User API', () => {
  it('creates a user', async () => {
    const userData = userFactory.build()
    
    const response = await fetch('/api/users', {
      method: 'POST',
      body: JSON.stringify(userData)
    })
    
    expect(response.ok).toBe(true)
  })
})
See Also
- Performance Pack - Validate large datasets
 - Contract Testing - Test with factory data