Testingintermediate
Create test data factories and fixtures
Test Data Factory
Create test data factories and fixtures
Create test data factories and fixtures.
Instructions
- Create a factory for each entity:
// factories/user.ts
let idCounter = 1;
interface UserOverrides {
name?: string;
email?: string;
role?: 'admin' | 'user';
isActive?: boolean;
}
export function createUser(overrides: UserOverrides = {}): User {
const id = idCounter++;
return {
id,
name: overrides.name ?? `Test User ${id}`,
email: overrides.email ?? `user${id}@test.com`,
role: overrides.role ?? 'user',
isActive: overrides.isActive ?? true,
createdAt: new Date(),
};
}
// Related entities
export function createOrder(user?: User, overrides: Partial<Order> = {}): Order {
const u = user ?? createUser();
return {
id: idCounter++,
userId: u.id,
status: overrides.status ?? 'pending',
total: overrides.total ?? 99.99,
items: overrides.items ?? [createOrderItem()],
};
}
- Usage in tests:
it('should apply discount for active admin users', () => {
const admin = createUser({ role: 'admin', isActive: true });
const order = createOrder(admin, { total: 200 });
expect(calculateDiscount(admin, order)).toBe(20);
});
Rules
- Factories always produce valid data by default
- Only override what the test cares about
- Reset counters between test suites if IDs matter