playwright-fixtures
Version:
Wrap your tests with Playwright-like test fixtures in node & browsers
16 lines (15 loc) • 1.15 kB
TypeScript
declare type KeyValue = Record<string, unknown>;
declare type FixtureFunction<R, Args extends KeyValue> = (args: Args, use: (r: R) => Promise<void>) => Promise<void> | void;
declare type FixtureValue<R, Args extends KeyValue> = R extends Function ? FixtureFunction<R, Args> : (FixtureFunction<R, Args> | R);
declare type Fixtures<T extends KeyValue, PT extends KeyValue = {}> = {
[K in keyof PT]?: FixtureValue<PT[K], PT & T>;
} & {
[K in keyof T]: FixtureValue<T[K], PT & T>;
};
export declare type BaseTest = (name: string, inner: (...args: unknown[]) => Promise<void> | void) => unknown;
declare type TestCall<Args extends KeyValue, B extends BaseTest> = B extends (name: string, inner: (...args: infer BaseArgs) => infer InnerReturn) => infer Return ? (name: string, inner: (args: Args, ...baseArgs: BaseArgs) => InnerReturn) => Return : never;
declare type Test<Args extends KeyValue, B extends BaseTest> = Pick<B, keyof B> & TestCall<Args, B> & {
extend<T extends KeyValue = {}>(fixtures: Fixtures<T, Args>): Test<Args & T, B>;
};
declare const wrap: <B extends BaseTest = BaseTest>(baseTest: B) => Test<{}, B>;
export default wrap;