test-data-generator

Generate test data, fixtures, and mocks for testing.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "test-data-generator" with this command: npx skills add armanzeroeight/fastagent-plugins/armanzeroeight-fastagent-plugins-test-data-generator

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Automation

gcp-cost-optimizer

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

schema-designer

No summary provided by upstream source.

Repository SourceNeeds Review
Automation

inventory-manager

No summary provided by upstream source.

Repository SourceNeeds Review