test-data-generator
SKILL.md
Test Data Generator
Generate test data, fixtures, and mocks for testing.
Quick Start
Create a simple fixture:
const mockUser = {
id: 1,
name: 'Test User',
email: 'test@example.com'
}
Instructions
Factory Functions
Create reusable data generators:
function createUser(overrides = {}) {
return {
id: Math.floor(Math.random() * 1000),
name: 'Test User',
email: 'test@example.com',
role: 'user',
createdAt: new Date().toISOString(),
...overrides
}
}
// Usage
const admin = createUser({ role: 'admin', name: 'Admin User' })
const regularUser = createUser()
def create_user(**kwargs):
defaults = {
'id': random.randint(1, 1000),
'name': 'Test User',
'email': 'test@example.com',
'role': 'user',
'created_at': datetime.now()
}
return {**defaults, **kwargs}
# Usage
admin = create_user(role='admin', name='Admin User')
Builder Pattern
For complex objects:
class UserBuilder {
constructor() {
this.user = {
id: 1,
name: 'Test User',
email: 'test@example.com',
role: 'user',
preferences: {}
}
}
withId(id) {
this.user.id = id
return this
}
withName(name) {
this.user.name = name
return this
}
withRole(role) {
this.user.role = role
return this
}
withPreferences(preferences) {
this.user.preferences = preferences
return this
}
build() {
return this.user
}
}
// Usage
const user = new UserBuilder()
.withId(123)
.withName('John Doe')
.withRole('admin')
.withPreferences({ theme: 'dark' })
.build()
Test Fixtures
JavaScript/TypeScript:
// fixtures/users.js
export const users = {
admin: {
id: 1,
name: 'Admin User',
email: 'admin@example.com',
role: 'admin'
},
regular: {
id: 2,
name: 'Regular User',
email: 'user@example.com',
role: 'user'
}
}
// In tests
import { users } from './fixtures/users'
test('admin can delete posts', () => {
expect(canDelete(users.admin)).toBe(true)
})
Python (pytest):
# conftest.py
import pytest
@pytest.fixture
def sample_user():
return {
'id': 1,
'name': 'Test User',
'email': 'test@example.com',
'role': 'user'
}
@pytest.fixture
def admin_user():
return {
'id': 2,
'name': 'Admin User',
'email': 'admin@example.com',
'role': 'admin'
}
# In tests
def test_user_permissions(sample_user, admin_user):
assert can_delete(admin_user)
assert not can_delete(sample_user)
Mock Data
API Responses:
const mockApiResponse = {
data: {
users: [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' }
]
},
status: 200,
statusText: 'OK'
}
// Mock fetch
global.fetch = jest.fn(() =>
Promise.resolve({
json: () => Promise.resolve(mockApiResponse.data)
})
)
Database Records:
mock_db_records = [
{'id': 1, 'name': 'Product A', 'price': 10.99},
{'id': 2, 'name': 'Product B', 'price': 20.99},
{'id': 3, 'name': 'Product C', 'price': 15.99}
]
@patch('app.database.query')
def test_get_products(mock_query):
mock_query.return_value = mock_db_records
products = get_products()
assert len(products) == 3
Random Data Generation
Using faker (JavaScript):
import { faker } from '@faker-js/faker'
function generateUser() {
return {
id: faker.string.uuid(),
name: faker.person.fullName(),
email: faker.internet.email(),
avatar: faker.image.avatar(),
address: {
street: faker.location.streetAddress(),
city: faker.location.city(),
country: faker.location.country()
}
}
}
// Generate multiple users
const users = Array.from({ length: 10 }, generateUser)
Using Faker (Python):
from faker import Faker
fake = Faker()
def generate_user():
return {
'id': fake.uuid4(),
'name': fake.name(),
'email': fake.email(),
'phone': fake.phone_number(),
'address': {
'street': fake.street_address(),
'city': fake.city(),
'country': fake.country()
}
}
# Generate multiple users
users = [generate_user() for _ in range(10)]
Seeded Random Data
For reproducible tests:
import { faker } from '@faker-js/faker'
test('generates consistent data with seed', () => {
faker.seed(123)
const user1 = generateUser()
faker.seed(123)
const user2 = generateUser()
expect(user1).toEqual(user2)
})
from faker import Faker
def test_consistent_data():
fake = Faker()
Faker.seed(123)
user1 = generate_user(fake)
Faker.seed(123)
user2 = generate_user(fake)
assert user1 == user2
Mock Functions
Jest:
const mockCallback = jest.fn(x => x * 2)
test('calls callback for each item', () => {
const items = [1, 2, 3]
items.forEach(mockCallback)
expect(mockCallback).toHaveBeenCalledTimes(3)
expect(mockCallback).toHaveBeenCalledWith(1)
expect(mockCallback).toHaveBeenCalledWith(2)
expect(mockCallback).toHaveBeenCalledWith(3)
})
Python (unittest.mock):
from unittest.mock import Mock
def test_callback():
mock_callback = Mock(return_value=42)
result = process_data([1, 2, 3], mock_callback)
assert mock_callback.call_count == 3
mock_callback.assert_called_with(3)
Time-based Data
Freeze time:
import { jest } from '@jest/globals'
test('creates timestamp', () => {
const mockDate = new Date('2024-01-01T00:00:00Z')
jest.useFakeTimers()
jest.setSystemTime(mockDate)
const record = createRecord()
expect(record.createdAt).toBe('2024-01-01T00:00:00.000Z')
jest.useRealTimers()
})
from freezegun import freeze_time
@freeze_time("2024-01-01 00:00:00")
def test_timestamp():
record = create_record()
assert record['created_at'] == datetime(2024, 1, 1, 0, 0, 0)
Common Patterns
Pattern: Array of test cases:
const testCases = [
{ input: 'hello', expected: 'HELLO' },
{ input: 'world', expected: 'WORLD' },
{ input: '', expected: '' }
]
testCases.forEach(({ input, expected }) => {
test(`converts "${input}" to "${expected}"`, () => {
expect(toUpperCase(input)).toBe(expected)
})
})
Pattern: Shared setup:
describe('UserService', () => {
let service
let mockDb
beforeEach(() => {
mockDb = {
query: jest.fn(),
insert: jest.fn()
}
service = new UserService(mockDb)
})
test('fetches users', async () => {
mockDb.query.mockResolvedValue([{ id: 1 }])
const users = await service.getUsers()
expect(users).toHaveLength(1)
})
})
Pattern: Test data files:
// testData/users.json
[
{
"id": 1,
"name": "Alice",
"email": "alice@example.com"
},
{
"id": 2,
"name": "Bob",
"email": "bob@example.com"
}
]
// In tests
import users from './testData/users.json'
test('processes user data', () => {
const result = processUsers(users)
expect(result).toHaveLength(2)
})
Advanced
For complex scenarios:
- Use factory libraries (factory-bot, fishery, rosie)
- Generate GraphQL mock data
- Create database seeders
- Build test data pipelines
Weekly Installs
6
Repository
armanzeroeight/…-pluginsGitHub Stars
26
First Seen
Feb 4, 2026
Security Audits
Installed on
opencode5
gemini-cli5
claude-code5
github-copilot5
codex5
amp4