const has = (object: Record<string, unknown>, key: string) => {
return object != null && hasOwnProperty.call(object, key)
};
Run Code Online (Sandbox Code Playgroud)
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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
有没有人有为玩笑测试添加类型的经验?我正在使用describe.each循环遍历数据集。虽然我能够成功运行测试,但我想解决打字问题。有人能帮我吗?
您似乎没有最新版本的 jest 类型,请尝试将包更新@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
}
}
Run Code Online (Sandbox Code Playgroud)
您可能还需要指定typeRoots配置选项,以便打字稿可以选择您的自定义类型
更新:
抱歉,我刚刚注意到您的问题不是没有Eachinterface 而是type 不正确。在您的情况下,打字稿似乎无法正确推断类型,因此您可能需要明确指定泛型类型,例如:
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
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6585 次 |
| 最近记录: |