test-patterns
Applies proven testing patterns — Arrange-Act-Assert (AAA), Given-When-Then, Test Data Builders, Object Mother, parameterized tests, fixtures, spies, and test doubles — to help write maintainable, reliable, and readable test suites
Install / Use
npx skills add rohitg00/skillkit --skill test-patternsInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Content & MediaSupported Platforms
Our assessment of test-patterns
test-patterns scores 88/100 on our quality scale, 427th of 1,010 Content & Media skills we index (top 43%).
Its SKILL.md is 6.9 KB long, well organised into 15 sections with 8 code examples: a thorough specification that gives an agent plenty to work with.
With 1,538 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated about 4 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 98/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
test-patterns compared with similar skills
All 4 of these similar skills score higher than test-patterns; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| test-patterns (this skill)by rohitg00 | 88 | 1.5k | 4mo ago | SKILL.md |
| siyuanby siyuan-note | 100 | 46.6k | today | MCP Server |
| algorithmic-artby anthropics | 100 | 177.9k | 8d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 8d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 130.2k | 9d ago | SKILL.md |
Frequently asked questions
- How do I install test-patterns?
- Run
npx skills add rohitg00/skillkit --skill test-patterns. The install tabs above show the steps for each supported agent. - Which AI agents does test-patterns work with?
- It is written for Zed, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is test-patterns safe to use?
- It is Apache-2.0-licensed and scores 98/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is test-patterns still maintained?
- The repository was last updated about 4 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
Skill content
View source on GitHubname: test-patterns description: Applies proven testing patterns — Arrange-Act-Assert (AAA), Given-When-Then, Test Data Builders, Object Mother, parameterized tests, fixtures, spies, and test doubles — to help write maintainable, reliable, and readable test suites. Use when the user asks about writing unit tests, integration tests, or end-to-end tests; structuring test cases or test suites; applying TDD or BDD practices; working with mocks, stubs, spies, or fakes; improving test coverage or reducing flakiness; or needs guidance on test organization, naming conventions, or assertions in frameworks like Jest, Vitest, pytest, or similar. version: 1.0.0 triggers:
- test patterns
- testing best practices
- how to write tests
- test structure
- arrange act assert tags:
- testing
- patterns
- quality
- best-practices difficulty: intermediate estimatedTime: 10 relatedSkills:
- testing/red-green-refactor
- testing/anti-patterns
Test Patterns
You are applying proven testing patterns to write maintainable, reliable tests. These patterns help ensure tests are readable, focused, and trustworthy.
Pattern Selection Guide
Use this to choose the right pattern for your situation:
- Structuring a single test? → Arrange-Act-Assert (AAA) or Given-When-Then
- Writing behavior/feature specs? → Given-When-Then (BDD style)
- Repeating test setup data? → Test Data Builders
- Many variations of complex objects? → Object Mother
- Testing same logic with many inputs? → Parameterized Tests
- Shared setup/teardown across tests? → Test Fixtures
- Verifying a dependency was called? → Spy
- Replacing an external dependency? → Test Doubles (Stub / Mock / Fake)
Pattern Combination Workflows
Patterns rarely stand alone — here's how to combine them for common scenarios:
Unit tests (isolated logic): Fixtures for setup → AAA structure → Stubs/Mocks for dependencies → Parameterized Tests for multiple input cases
Integration tests (service + external dependencies): Fixtures for setup → AAA structure → Fakes for external services (e.g. in-memory DB) → Spies to verify interaction points
BDD / feature specs: Given-When-Then → Object Mother or Test Data Builders for scenario data → Fakes for infrastructure
High-variation logic (validators, calculators, formatters): Parameterized Tests → Test Data Builders to construct each case → AAA structure within each case
Core Pattern: Arrange-Act-Assert (AAA)
Structure every test with three distinct phases:
// Arrange - Set up test data and dependencies
const user = createTestUser({ role: 'admin' });
const service = new UserService(mockRepository);
// Act - Execute the code under test
const result = await service.updateRole(user.id, 'member');
// Assert - Verify the expected outcome
expect(result.role).toBe('member');
expect(mockRepository.save).toHaveBeenCalledWith(user);
Guidelines:
- Keep sections visually separated (blank lines or comments)
- Arrange should be minimal - only what's needed for this test
- Act should be a single operation
- Assert should verify one logical concept
Pattern: Given-When-Then (BDD Style)
For behavior-focused tests:
describe('Shopping Cart', () => {
describe('when adding an item', () => {
it('should increase the item count', () => {
// Given
const cart = new Cart();
// When
cart.add({ id: '1', quantity: 2 });
// Then
expect(cart.itemCount).toBe(2);
});
});
});
Pattern: Test Data Builders
Create flexible test data without repetition:
// Builder function
function createTestOrder(overrides = {}) {
return {
id: 'order-123',
status: 'pending',
items: [],
total: 0,
...overrides
};
}
// Usage
const completedOrder = createTestOrder({ status: 'completed', total: 99.99 });
const emptyOrder = createTestOrder({ items: [] });
Pattern: Object Mother
Factory for complex test objects:
class TestUserFactory {
static admin() {
return new User({ role: 'admin', permissions: ALL_PERMISSIONS });
}
static guest() {
return new User({ role: 'guest', permissions: [] });
}
static withSubscription(tier) {
return new User({ subscription: { tier, active: true } });
}
}
Pattern: Parameterized Tests
Test multiple cases efficiently:
describe('isValidEmail', () => {
const validCases = [
'user@example.com',
'user.name@domain.co.uk',
'user+tag@example.org'
];
const invalidCases = [
'',
'not-an-email',
'@no-local.com',
'no-domain@'
];
test.each(validCases)('should accept valid email: %s', (email) => {
expect(isValidEmail(email)).toBe(true);
});
test.each(invalidCases)('should reject invalid email: %s', (email) => {
expect(isValidEmail(email)).toBe(false);
});
});
Pattern: Test Fixtures
Reusable test setup:
describe('OrderService', () => {
let service;
let mockPaymentGateway;
let mockInventory;
beforeEach(() => {
mockPaymentGateway = createMockPaymentGateway();
mockInventory = createMockInventory();
service = new OrderService(mockPaymentGateway, mockInventory);
});
afterEach(() => {
jest.clearAllMocks();
});
});
Pattern: Spy on Dependencies
Verify interactions without implementation:
it('should send notification on order completion', async () => {
const notifySpy = jest.spyOn(notificationService, 'send');
await orderService.complete(orderId);
expect(notifySpy).toHaveBeenCalledWith({
type: 'order_completed',
orderId: orderId
});
});
Pattern: Test Doubles
Choose the right type:
| Type | When to Use | |------|-------------| | Stub | Need predictable, canned return values | | Mock | Need to assert a dependency was called correctly | | Spy | Partial mocking — observe calls on a real object | | Fake | Need a working lightweight substitute (e.g. in-memory DB) |
Pattern: Test Isolation
Ensure tests don't affect each other:
- Fresh instances - Create new objects in each test
- Reset mocks - Clear mock state between tests
- Clean up - Remove side effects (files, database rows)
- No shared mutable state - Avoid global variables
Naming Conventions
Test names should describe:
- What is being tested
- Under what conditions
- What the expected outcome is
Good examples:
shouldReturnEmptyArrayWhenNoItemsExistthrowsErrorWhenUserNotAuthenticatedcalculatesDiscountForPremiumMembers
Test Organization
src/
services/
UserService.ts
UserService.test.ts # Co-located tests
tests/
integration/
api.test.ts # Integration tests
e2e/
checkout.spec.ts # End-to-end tests
Verification Checklist
For each test:
- [ ] Single responsibility (tests one thing)
- [ ] Clear AAA or GWT structure
- [ ] Descriptive name
- [ ] Fast execution (< 100ms for unit tests)
- [ ] Deterministic (no flakiness)
- [ ] Independent (runs in any order)
Related Skills
siyuan
46.6kAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
130.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
