← スキル一覧に戻る

testing-patterns
by leather-io
Leather monorepo
⭐ 25🍴 15📅 2026年1月23日
SKILL.md
name: testing-patterns description: Testing conventions and patterns for the Leather monorepo. Use when writing tests, creating test fixtures, or following TDD workflow. Covers Vitest setup, naming conventions, and common patterns.
Leather Testing Patterns
The monorepo uses Vitest for testing. Tests are co-located with source files.
File Naming
- Test files:
{module-name}.spec.tsor{module-name}.spec.tsx - Co-located with source:
src/utils/format.ts→src/utils/format.spec.ts
Test Structure
import { functionUnderTest } from './module-name';
describe(functionUnderTest.name, () => {
test('describes expected behavior', () => {
// Arrange
const input = createTestData();
// Act
const result = functionUnderTest(input);
// Assert
expect(result).toEqual(expected);
});
test('handles error case', () => {
expect(() => functionUnderTest(invalidInput)).toThrowError();
});
});
Key Conventions
- Use
testnotit- Project convention - Name describe blocks with function reference:
describe(functionName.name, () => {}) - Descriptive test names: Describe behavior, not implementation
- Test both success and error paths
Fixtures and Test Data
Define reusable test data at file scope:
import BigNumber from 'bignumber.js';
import { createMoney } from './create-money';
const tenStx = createMoney(10, 'STX', 6);
const tenBtc = createMoney(10, 'BTC', 8);
const moneyArray = [tenStx, eightStx, nineStx];
BigNumber Assertions
For Money and BigNumber comparisons:
expect(result.amount.toString()).toEqual('100');
// NOT: expect(result.amount).toEqual(new BigNumber(100));
Running Tests
# Run all tests
pnpm test
# Run tests for specific package
pnpm --filter @leather.io/utils test
# Run tests in watch mode
pnpm --filter @leather.io/bitcoin test -- --watch
# Run specific test file
pnpm --filter @leather.io/utils test -- src/money/create-money.spec.ts
Mocking
For pure utility functions, avoid mocking internal modules. Mock only:
- External API calls
- Browser/native APIs
- Time-dependent functions
import { vi } from 'vitest';
vi.useFakeTimers();
vi.setSystemTime(new Date('2025-01-15'));
React Component Tests
For UI components in @leather.io/ui:
import { render, screen } from '@testing-library/react';
import { Button } from './button';
describe('Button', () => {
test('renders children', () => {
render(<Button>Click me</Button>);
expect(screen.getByText('Click me')).toBeInTheDocument();
});
});
Common Patterns
Testing thrown errors
test('throws on invalid input', () => {
expect(() => functionUnderTest(null)).toThrowError('Expected error message');
});
Testing async functions
test('resolves with data', async () => {
const result = await asyncFunction();
expect(result).toEqual(expected);
});
Testing type guards
test('returns true for valid input', () => {
expect(isValidType(validInput)).toBe(true);
});
test('returns false for invalid input', () => {
expect(isValidType(invalidInput)).toBe(false);
});
スコア
総合スコア
65/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
✓フォーク
10回以上フォークされている
+5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です