Token导航 LogoToken导航TokenDH.com
前端设计操作浏览器github未标认证来源可访问clear审计通过

writing-tests编写测试

Agent Skill

用于辅助前端页面、组件、样式和交互逻辑的开发与维护。它适合让 Agent 生成或审查 React、Next.js、Vue、Tailwind、CSS 等相关代码,整理组件结构,或定位布局和性能问题。使用时需要结合项目现有设计系统、路由和构建方式,避免只生成孤立片段;涉及页面改动时,应配合本地预览和构建检查确认视觉效果。

总安装

388

周安装

16

GitHub Stars

5

下载量

127
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

3

许可证

MIT

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:writing-tests(编写测试)
来源仓库:https://github.com/third774/dotfiles
仓库路径:skills/writing-tests
安装命令:
npx skills add https://github.com/third774/dotfiles --skill writing-tests
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/third774/dotfiles --skill writing-tests

简介

用于辅助前端页面、组件、样式和交互逻辑的开发与维护。

  • 适合生成或审查 React、Next.js、Vue、Tailwind、CSS 等相关代码,整理组件结构或定位布局问题。
  • 使用时需结合项目现有设计系统、路由和构建方式,避免生成孤立片段;涉及页面改动应配合本地预览确认效果。
  • 安装命令:npx skills add https://github.com/third774/dotfiles --skill writing-tests。
  • 支持 Codex、Claude、Cursor、Gemini CLI,通过 GitHub 仓库安装。

SKILL.md

Writing Tests

Core Philosophy: Test user-observable behavior with real dependencies. Tests should survive refactoring when behavior is unchanged.

Iron Laws:

Testing Trophy Model

Write tests in this priority order:

  1. Integration Tests (PRIMARY) - Multiple units with real dependencies
  2. E2E Tests (SECONDARY) - Complete workflows across the stack
  3. Unit Tests (RARE) - Pure functions only (no dependencies)

Default to integration tests. Only drop to unit tests for pure utility functions.

Pre-Test Workflow

BEFORE writing any tests, copy this checklist and track your progress:

Test Writing Progress:
- [ ] Step 1: Review project standards (check existing tests)
- [ ] Step 2: Understand behavior (what should it do? what can fail?)
- [ ] Step 3: Choose test type (Integration/E2E/Unit)
- [ ] Step 4: Identify dependencies (real vs mocked)
- [ ] Step 5: Write failing test first (TDD)
- [ ] Step 6: Implement minimal code to pass
- [ ] Step 7: Verify coverage (happy path, errors, edge cases)

Before writing any tests:

  1. Review project standards - Check existing test files, testing docs, or project conventions
  2. Understand behavior - What should this do? What can go wrong?
  3. Choose test type - Integration (default), E2E (critical workflows), or Unit (pure functions)
  4. Identify dependencies - What needs to be real vs mocked?

Test Type Decision

Is this a complete user workflow?
  → YES: E2E test

Is this a pure function (no side effects/dependencies)?
  → YES: Unit test

Everything else:
  → Integration test (with real dependencies)

Mocking Guidelines

Default: Don't mock. Use real dependencies.

Only Mock These

  • External HTTP/API calls
  • Time-dependent operations (timers, dates)
  • Randomness (random numbers, UUIDs)
  • File system I/O
  • Third-party services (payments, analytics, email)
  • Network boundaries

Never Mock These

  • Internal modules/packages
  • Database queries (use test database)
  • Business logic
  • Data transformations
  • Your own code calling your own code

Why: Mocking internal dependencies creates brittle tests that break during refactoring.

Before Mocking, Ask:

  1. "What side effects does this method have?"
  2. "Does my test depend on those side effects?"
  3. If yes → Mock at lower level (the slow/external operation, not the method test needs)
  4. Unsure? → Run with real implementation first, observe what's needed, THEN add minimal mocking

Mock Red Flags

  • "I'll mock this to be safe"
  • "This might be slow, better mock it"
  • Can't explain why mock is needed
  • Mock setup longer than test logic
  • Test fails when removing mock

Integration Test Pattern

describe("Feature Name", () => {
  setup(initialState)

  test("should produce expected output when action is performed", () => {
    // Arrange: Set up preconditions
    // Act: Perform the action being tested
    // Assert: Verify observable output
  })
})

Key principles:

  • Use real state/data, not mocks
  • Assert on outputs users/callers can observe
  • Test the behavior, not the implementation

For language-specific patterns, see the Language-Specific Patterns section.

Async Waiting Patterns

When tests involve async operations, avoid arbitrary timeouts:

// BAD: Guessing at timing
sleep(500)
assert result == expected

// GOOD: Wait for the actual condition
wait_for(lambda: result == expected)

When to use condition-based waiting:

  • Tests use sleep, setTimeout, or arbitrary delays
  • Tests are flaky (pass locally, fail in CI)
  • Tests timeout when run in parallel
  • Waiting for async operations to complete

Delegate to skill: When you encounter these patterns, invoke Skill(ce:condition-based-waiting) for detailed guidance on implementing proper condition polling and fixing flaky tests.

Assertion Strategy

Principle: Assert on observable outputs, not internal state.

ContextAssert OnAvoid
UIVisible text, accessibility roles, user-visible stateCSS classes, internal state, test IDs
APIResponse body, status code, headersInternal DB state directly
CLIstdout/stderr, exit codeInternal variables
LibraryReturn values, documented side effectsPrivate methods, internal state

Why: Tests that assert on implementation details break when you refactor, even if behavior is unchanged.

Test Data Management

Use source constants and fixtures, not hard-coded values:

// Good - References actual constant or fixture
expected_message = APP_MESSAGES.SUCCESS
assert response.message == expected_message

// Bad - Hard-coded, breaks when copy changes
assert response.message == "Action completed successfully!"

Why: When product copy changes, you want one place to update, not every test file.

Anti-Patterns to Avoid

Testing Mock Behavior

// BAD: Testing that the mock was called, not real behavior
mock_service.assert_called_once()

// GOOD: Test the actual outcome
assert user.is_active == True
assert len(sent_emails) == 1

Gate: Before asserting on mock calls, ask "Am I testing real behavior or mock interactions?" If testing mocks → Stop, test the actual outcome instead.

Test-Only Methods in Production

// BAD: destroy() only used in tests - pollutes production code
class Session:
    def destroy(self):  # Only exists for test cleanup
        ...

// GOOD: Test utilities handle cleanup
# In test_utils.py
def cleanup_session(session):
    # Access internals here, not in production code
    ...

Gate: Before adding methods to production code, ask "Is this only for tests?" Yes → Put in test utilities.

Mocking Without Understanding

// BAD: Mock prevents side effect test actually needs
mock(database.save)  # Now duplicate detection won't work!

add_item(item)
add_item(item)  # Should fail as duplicate, but won't

// GOOD: Mock at correct level
mock(external_api.validate)  # Mock slow external call only

add_item(item)  # DB save works, duplicate detected
add_item(item)  # Fails correctly

Incomplete Mocks

// BAD: Partial mock - missing fields downstream code needs
mock_response = {
    status: "success",
    data: {...}
    // Missing: metadata.request_id that downstream code uses
}

// GOOD: Mirror real API completely
mock_response = {
    status: "success",
    data: {...},
    metadata: {request_id: "...", timestamp: ...}
}

Gate: Before creating mocks, check "What does the real thing return?" Include ALL fields.

TDD Prevents Anti-Patterns

  1. Write test first → Think about what you're testing (not mocks)
  2. Watch it fail → Confirms test tests real behavior
  3. Minimal implementation → No test-only methods creep in
  4. Real dependencies first → See what test needs before mocking

If testing mock behavior, you violated TDD - you added mocks without watching test fail against real code.

Language-Specific Patterns

For detailed framework and language-specific patterns:

  • JavaScript/React: See references/javascript-react.md for React Testing Library queries, Jest/Vitest setup, Playwright E2E, and component testing patterns
  • Python: See references/python.md for pytest fixtures, polyfactory, respx mocking, testcontainers, and FastAPI testing
  • Go: See references/go.md for table-driven tests, testify/go-cmp assertions, testcontainers-go, and interface fakes

Quality Checklist

Before completing tests, verify:

  • Happy path covered
  • Error conditions handled
  • Edge cases considered
  • Real dependencies used (minimal mocking)
  • Async waiting uses conditions, not arbitrary timeouts
  • Tests survive refactoring (no implementation details)
  • No test-only methods added to production code
  • No assertions on mock existence or call counts
  • Test names describe behavior, not implementation

What NOT to Test

  • Internal state
  • Private methods
  • Function call counts
  • Implementation details
  • Mock existence
  • Framework internals

Test behavior users/callers observe, not code structure.

Quick Reference

Test TypeWhenDependencies
IntegrationDefault choiceReal (test DB, real modules)
E2ECritical user workflowsReal (full stack)
UnitPure functions onlyNone
Anti-PatternFix
Testing mock existenceTest actual outcome instead
Test-only methods in productionMove to test utilities
Mocking without understandingUnderstand dependencies, mock minimally
Incomplete mocksMirror real API completely
Tests as afterthoughtTDD - write tests first
Arbitrary timeouts/sleepsUse condition-based waiting

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

04

需要参考平台分布和安装热度时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

补充不同宿主或平台的使用分布数据

能力 5

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

windsurf

27.55%
按下载量换算35

OpenCode

19.64%
按下载量换算25

Codex

16.68%
按下载量换算21

Claude Code

13.27%
按下载量换算17

Antigravity

7.81%
按下载量换算10

Gemini CLI

3.29%
按下载量换算4

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

来源信息

继续浏览同类 Skills