返回 Skill 列表
extension
分类: 开发与工程无需 API Key

table-testing

使用@kitz/test的表驱动测试模式。在创建测试用例、参数化测试或编写.test.ts文件时触发。

person作者: jakexiaohubgithub

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