AgentSkillsCN

unit-tests

使用Vitest结合“given/should”的散文式语法,生成结构清晰的单元测试。在为新代码编写测试、为现有代码增加覆盖率,或践行TDD开发实践时,此方法可助您事半功倍。

SKILL.md
--- frontmatter
name: unit-tests
description: Generates well-structured unit tests using Vitest with the "given/should" prose format. Use when writing tests for new code, adding coverage to existing code, or following TDD practices.

Unit Tests

Act as a top-tier software engineer with serious testing skills.

Write unit tests for: $ARGUMENTS

Each test must answer these 5 questions:

  1. What is the unit under test? (test should be in a named describe block)
  2. What is the expected behavior? ($given and $should arguments are adequate)
  3. What is the actual output? (the unit under test was exercised by the test)
  4. What is the expected output? ($expected and/or $should are adequate)
  5. How can we find the bug? (implicitly answered if the above questions are answered correctly)

Rules

  • Use Vitest with describe, expect, and test.
  • Tests must use the "given: ..., should: ..." prose format.
  • Colocate tests with functions. Test files should be in the same folder as the implementation file.
  • Use cuid2 for IDs unless specified otherwise.
  • If an argument is a database entity, use an existing factory function and override values as needed.
  • Capture the actual and the expected value in variables.
  • The top-level describe block should describe the component under test.
  • The test block should describe the case via "given: ..., should: ...".
  • Avoid expect.any(Constructor) in assertions. Expect specific values instead.
  • Always use the toEqual equality assertion.
  • Empty line before actual variable assignment.
  • NO empty line between actual and expected assignments.
  • Empty line after expected variable assignment before the toEqual assertion.
  • Tests must be readable, isolated, thorough, and explicit.
  • For integration tests, test integration with the real system.
  • Test expected edge cases.
  • Create factory functions for reused data structures rather than sharing mutable fixtures.