Сценарий

У нас есть простая функция contains, которая проверяет, содержит ли string другую:

/**
 * Test whether the target string contains the contained string.
 *
 * @param target The string that should contains the element
 * @param contained The possibly contained string
 * @return true if the `target` string contains the `contained` string, false otherwise
 * @example
 * ```
 * expect(contains('foobar', 'foo')).toBeTruthy()
 * ```
 */
export function contains(target: string, contained: string):boolean {
   return target.indexOf(contained) >= 0;
}

И мы хотим протестировать его, передав допустимые и недопустимые данные в тестовую функцию следующим образом:

test('contains', ()=>{
   runtest(testdata, contains)
})

Подход

Упряжь

Мы поместим наши тестовые данные в обвязку следующим образом:

const testdata: TestData[] = [
{
it: 'should test contains',
args: ['foo'],
valid: ['foo', 'foobar', 'bazfoo'],
invalid: ['bar', 'fobar'],
}]

Обратите внимание, что args содержит второй аргумент, который мы передаем в contains.

Если тестируются несколько аргументов, мы можем передать их через each. Например:

each: ['baz', 'bar', 'beech']

Интерфейс TestData

export interface TestData {
it: string
args?: any
each?: any[]
valid: any[],
invalid: any[]
}

Тестовая служебная функция

Дополнительные примеры

См. тесты Firefly Semantics ValidatorTS: