gpt4 book ai didi

typescript - 如何使用 describe.each 为 jest 测试添加类型?

转载 作者:行者123 更新时间:2023-12-03 16:22:53 24 4
gpt4 key购买 nike

const has = (object: Record<string, unknown>, key: string) => {
return object != null && hasOwnProperty.call(object, key)
};

has.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);
});
});
});

enter image description here

有没有人有为开 Jest 测试添加类型的经验?我正在使用 describe.each循环数据集。虽然我能够成功运行测试,但我想解决这个打字问题。有人能帮我吗?

最佳答案

看来你没有最新版本的 Jest 类型,尝试更新包@types/jest到最新版本(它包含 Each 接口(interface)的类型定义)。

如果由于某些原因无法做到这一点,您始终可以使用名为 declaration-merging 的 typescript 功能自己“扩展”类型。 :

// 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配置选项,以便 typescript 可以选择您的自定义类型

更新:
抱歉,我刚刚注意到您的问题并非没有 Each界面,但类型不正确。
在您的情况下, typescript 似乎无法正确推断类型,因此您可能希望明确指定泛型类型,例如:
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
});

关于typescript - 如何使用 describe.each 为 jest 测试添加类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57504927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com