Определение проблемы
Jest позволяет использовать данные тестового примера в it.each
name
через $
переменные с префиксом.
Приведенный ниже код приводит к выводу например:
PASS src/array-functions/find-pairwise.spec.ts
findPairwise
√ should return [1, 2] for [1, 2, 3] and [Function anonymous] (7ms)
√ should return [1, 2] for [1, 2, 3] and [Function anonymous] (1ms)
√ should return [2, 3] for [1, 2, 3] and [Function anonymous]
√ should return [2, 3] for [1, 2, 3] and [Function anonymous] (1ms)
√ should return [undefined, undefined] for [1, 2, 3] and [Function anonymous]
Test Suites: 1 passed, 1 total
Tests: 5 passed, 5 total
Snapshots: 0 total
Time: 4.061s
Ran all test suites related to changed files.
Как видите, переменные $expected
и $array
отображаются в удобной для человека форме (в данном случае массивы basi c JavaScript). Однако $predicate
показывает общий c текст [Function anonymous]
вместо его фактического кода. Я знаю, что и обычные функции, и функции стрелок в JS могут выставлять их исходный код, если вы вызываете .toString()
для них. Есть ли способ проинструктировать Jest отнести результат этого toString()
вызова? Я пробовал $predicate.toString()
и $(predicate.toString())
, но ни один из них не работал.
Код
import { findPairwise } from './find-pairwise';
describe(findPairwise.name, () => {
it.each`
array | predicate | expected
${[1, 2, 3]} | ${(l: number, r: number) => l === 1} | ${[1, 2]}
${[1, 2, 3]} | ${(l: number, r: number) => r === 2} | ${[1, 2]}
${[1, 2, 3]} | ${(l: number, r: number) => r === 3} | ${[2, 3]}
${[1, 2, 3]} | ${(l: number, r: number) => l + r === 5} | ${[2, 3]}
${[1, 2, 3]} | ${(l: number, r: number) => l === r } | ${[undefined, undefined]}
`
('should return $expected for $array and $predicate', ({ array, predicate, expected }) => {
// ^^^^^^^^^^
// ||||||||||
// I'd like this to be rendered
// as the code of the arrow function.
// E.g. "(l: number, r: number) => l === 1"
// ...or something close to it.
expect(findPairwise(array, predicate)).toEqual(expected);
});
});