typescript - 如何使用 describe.each 为 jest 测试添加类型?
问题描述
const has = (object: Record<string, unknown>, key: string) => {
return object != null && hasOwnProperty.call(object, key)
};
有.test.ts
describe('has', () => {
const obj = {
name: 'name',
1: 1,
false: false,
undefined: undefined
};
describe.each([
['name', true],
[1, true],
[false, true],
[undefined, true],
['no-such-key', false]
])('when key = %s', (key, expected) => {
it(`should return ${expected}`, () => {
expect(has(obj, key)).toBe(expected);
});
});
});
有没有人有为开玩笑测试添加类型的经验?我describe.each
用来循环数据集。虽然我能够成功运行测试,但我想解决这个打字问题。有人能帮我吗?
解决方案
看来您没有最新版本的开玩笑类型,请尝试将包更新@types/jest
到最新版本(它包含每个接口的类型定义)。
如果由于某些原因无法做到这一点,您始终可以使用名为declaration- merging 的打字稿功能自行“扩展”类型:
// jest.d.ts file
declare namespace jest {
interface Each {
// Exclusively arrays.
<T extends any[]>(cases: ReadonlyArray<T>): (name: string, fn: (...args: T) => any, timeout?: number) => void;
// Not arrays.
<T>(cases: ReadonlyArray<T>): (name: string, fn: (...args: T[]) => any, timeout?: number) => void;
(cases: ReadonlyArray<ReadonlyArray<any>>): (
name: string,
fn: (...args: any[]) => any,
timeout?: number
) => void;
(strings: TemplateStringsArray, ...placeholders: any[]): (
name: string,
fn: (arg: any) => any,
timeout?: number
) => void;
}
interface Describe {
each: Each
}
}
您可能还需要指定typeRoots配置选项,以便打字稿可以选择您的自定义类型
更新:
对不起,我刚刚注意到您的问题不是没有Each
界面而是类型不正确。在您的情况下,打字稿似乎无法正确推断类型,因此您可能希望明确指定泛型类型,例如:
type TestTuple = [string | number | boolean, boolean];
describe.each<TestTuple>([
['name', true],
[1, true],
[false, true],
[undefined, true],
['no-such-key', false]
])('when key = %s', (a, b) => {
// do your stuff
});
推荐阅读
- javascript - 如果在 Angular 的子组件内的元素上调用 DOM api,页面会滚动
- reactjs - 无法在 React.js 中解决“找不到模块:无法解析:”
- python - 使网格图中的图形仅在选择点时出现
- python - 从字符串中提取列
- reactjs - 从 Chromebook Linux 运行时在移动设备上预览 React 应用程序
- javascript - 我将模态的高度设置为更小,但它需要全屏并且不能正确显示
- apache-spark - Spark 上如何处理任务结果?
- list - 'List.empty(growable: false)' 或 'const []' 在 Dart 中更有效吗?
- java - SQLException: UCAExc:::5.0.0 行列计数不匹配
- c# - 实体框架:在一个命令中使用多个数据库上下文更新数据库架构