Claude Code Plugins

Community-maintained marketplace

Feedback

Table-driven testing patterns using @kitz/test. Triggers on creating test cases, parameterized tests, or when writing .test.ts files.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name table-testing
description Table-driven testing patterns using @kitz/test. Triggers on creating test cases, parameterized tests, or when writing .test.ts files.

Table-Driven Testing

Import

import { Test } from '@kitz/test'

Function Mode (Preferred)

Types are inferred from the function signature:

// Basic - input/output pairs
Test.on(add)
  .cases(
    [[2, 3], 5],
    [[-1, 1], 0],
    [[0, 0], 0],
  )
  .test()

// Snapshot mode - no expected output
Test.on(parseValue)
  .cases(
    [['42']],
    [['hello']],
  )
  .test()

Describe Mode

For custom types or grouping:

Test.describe('Transform')
  .inputType<string>()
  .outputType<string>()
  .cases(
    ['hello', 'HELLO'],
    ['world', 'WORLD'],
  )
  .test(({ input, output }) => {
    expect(input.toUpperCase()).toBe(output)
  })

Chained Describes

Use for nested groupings:

Test.describe('String > uppercase', [
  ['hello', 'HELLO'],
])
  .describe('String > lowercase', [
    ['HELLO', 'hello'],
  ])
  .test(({ input, output }) => {
    // runs for each describe block
  })

Matrix Testing

Cartesian product of inputs:

Test.on(format)
  .matrix({
    locale: ['en', 'fr', 'de'],
    currency: ['USD', 'EUR'],
    amount: [100, 1000],
  })
  .test()

Output Transformation

Transform expected outputs before comparison:

Test.on(serialize)
  .cases(
    [{ a: 1 }, '{"a":1}'],
  )
  .onOutput(JSON.parse) // parse expected before comparing
  .test()

Custom Assertions

Override default assertion:

Test.on(approximateCalc)
  .cases(
    [[1.1], 1],
    [[2.9], 3],
  )
  .test(({ input, output, actual }) => {
    expect(actual).toBeCloseTo(output, 0)
  })

Key Rules

  • NEVER wrap Test.on() or Test.describe() in Vitest describe blocks - they create their own
  • Use > separator for nested describes: 'Parent > Child'
  • Function mode infers types automatically - prefer it when testing a single function
  • Snapshot mode (no expected output) uses Vitest's snapshot system