问题定义
Jest 允许测试用例的数据用于it.each
's name
via $
- 前缀变量。
下面的代码产生如下输出:
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
and $array
变量以人类友好的形式呈现(在本例中是基本的 JavaScript 数组)。
但是,那$predicate
显示通用文本[Function anonymous]
而不是它的实际代码。
我知道 JS 中的常规函数和箭头函数都可以暴露它们的源代码,如果你调用.toString()
在他们。
有没有办法指示 Jest 渲染结果toString()
称呼?
我确实尝试过$predicate.toString()
and $(predicate.toString())
但他们都没有工作。
Code
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);
});
});