@mockmaster/data
v1.0.5
Published
Data factories and fake data generation for mock-master
Readme
@mockmaster/data
Data factories and fake data generation for mock-master
Part of the mock-master monorepo.
Installation
npm install @mockmaster/dataFeatures
- Factory System - Define reusable data factories with sequences
- Faker.js Integration - Generate realistic fake data
- Type Safe - Full TypeScript support with type inference
- Functional API - Pure functions, immutable data
Usage
Define a Factory
import { defineFactory, build, fake } from '@mockmaster/data'
const userFactory = defineFactory('user', {
id: (ctx) => ctx.sequence('user'),
name: () => fake.person.fullName(),
email: () => fake.internet.email(),
role: () => fake.helpers.arrayElement(['admin', 'user', 'guest']),
})Build Data
// Generate with defaults
const user1 = build(userFactory)
// { id: 1, name: 'John Doe', email: '[email protected]', role: 'user' }
const user2 = build(userFactory)
// { id: 2, name: 'Jane Smith', email: '[email protected]', role: 'admin' }
// Override specific fields
const admin = build(userFactory, { overrides: { role: 'admin' } })
// { id: 3, name: 'Bob Johnson', email: '[email protected]', role: 'admin' }Build Multiple
import { buildList } from '@mockmaster/data'
const users = buildList(userFactory, 10)
// Array of 10 users with sequential IDsReset Sequences
import { resetSequences } from '@mockmaster/data'
// Reset all sequences (useful in test setup)
resetSequences()
const user = build(userFactory)
// { id: 1, ... } - starts from 1 againAPI
defineFactory<T>(name: string, definition: FactoryDefinition<T>): Factory<T>
Defines a reusable factory for generating test data.
build<T>(factory: Factory<T>, options?: BuildOptions<T>): T
Builds a single instance from a factory.
buildList<T>(factory: Factory<T>, count: number, options?: BuildOptions<T>): T[]
Builds multiple instances from a factory.
resetSequences(): void
Resets all sequence counters to 1.
fake
Re-exported Faker.js instance for generating realistic data:
fake.person.fullName()fake.internet.email()fake.datatype.number()fake.helpers.arrayElement(array)- And many more!
Examples
Complex Factory
const postFactory = defineFactory('post', {
id: (ctx) => ctx.sequence('post'),
title: () => fake.lorem.sentence(),
body: () => fake.lorem.paragraphs(3),
authorId: () => fake.datatype.number({ min: 1, max: 100 }),
tags: () => fake.helpers.arrayElements(['typescript', 'testing', 'mocking'], 2),
createdAt: () => fake.date.past(),
})Use in Tests
import { describe, it, beforeEach } from 'vitest'
import { resetSequences } from '@mockmaster/data'
describe('User API', () => {
beforeEach(() => {
resetSequences() // Reset for deterministic tests
})
it('should create user', () => {
const user = build(userFactory, { overrides: { role: 'admin' } })
// Test with generated user...
})
})Links
License
MIT
