From testing-toolkit
Generates test fixtures, mock data, factories, and builders for unit/integration tests in JavaScript/TypeScript and Python, including pytest and Jest fixtures.
How this skill is triggered — by the user, by Claude, or both
Slash command
/testing-toolkit:test-data-generatorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate test data, fixtures, and mocks for testing.
Generate test data, fixtures, and mocks for testing.
Create a simple fixture:
const mockUser = {
id: 1,
name: 'Test User',
email: '[email protected]'
}
Create reusable data generators:
function createUser(overrides = {}) {
return {
id: Math.floor(Math.random() * 1000),
name: 'Test User',
email: '[email protected]',
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': '[email protected]',
'role': 'user',
'created_at': datetime.now()
}
return {**defaults, **kwargs}
# Usage
admin = create_user(role='admin', name='Admin User')
For complex objects:
class UserBuilder {
constructor() {
this.user = {
id: 1,
name: 'Test User',
email: '[email protected]',
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()
JavaScript/TypeScript:
// fixtures/users.js
export const users = {
admin: {
id: 1,
name: 'Admin User',
email: '[email protected]',
role: 'admin'
},
regular: {
id: 2,
name: 'Regular User',
email: '[email protected]',
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': '[email protected]',
'role': 'user'
}
@pytest.fixture
def admin_user():
return {
'id': 2,
'name': 'Admin User',
'email': '[email protected]',
'role': 'admin'
}
# In tests
def test_user_permissions(sample_user, admin_user):
assert can_delete(admin_user)
assert not can_delete(sample_user)
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
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)]
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
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)
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)
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": "[email protected]"
},
{
"id": 2,
"name": "Bob",
"email": "[email protected]"
}
]
// In tests
import users from './testData/users.json'
test('processes user data', () => {
const result = processUsers(users)
expect(result).toHaveLength(2)
})
For complex scenarios:
npx claudepluginhub p/armanzeroeight-testing-toolkit-plugins-testing-toolkitGenerates realistic test data including fixtures, factory functions, seed datasets, and edge case values. Supports Faker.js, Fishery, factory-boy, and database seed scripts.
Generates realistic, consistent test data using factories, fixtures, and fake data libraries. Use for seeding databases, building test builders, and creating mock data.
Creating and managing test data via fixtures, builders, factories, and minimal realistic datasets.