chore(ct): mount result refactor (#16067)
This commit is contained in:
parent
40f890014e
commit
557db4c35e
7
packages/playwright-ct-react/index.d.ts
vendored
7
packages/playwright-ct-react/index.d.ts
vendored
|
|
@ -34,9 +34,12 @@ export type PlaywrightTestConfig = Omit<BasePlaywrightTestConfig, 'use'> & {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface MountResult extends Locator {
|
||||||
|
unmount(): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ComponentFixtures {
|
export interface ComponentFixtures {
|
||||||
mount(component: JSX.Element, options?: { hooksConfig?: any }): Promise<Locator>;
|
mount(component: JSX.Element, options?: { hooksConfig?: any }): Promise<MountResult>;
|
||||||
unmount(component: Locator): Promise<void>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const test: TestType<
|
export const test: TestType<
|
||||||
|
|
|
||||||
9
packages/playwright-ct-svelte/index.d.ts
vendored
9
packages/playwright-ct-svelte/index.d.ts
vendored
|
|
@ -34,20 +34,23 @@ export type PlaywrightTestConfig = Omit<BasePlaywrightTestConfig, 'use'> & {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface MountResult extends Locator {
|
||||||
|
unmount(): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
interface ComponentFixtures {
|
interface ComponentFixtures {
|
||||||
mount(component: any, options?: {
|
mount(component: any, options?: {
|
||||||
props?: { [key: string]: any },
|
props?: { [key: string]: any },
|
||||||
slots?: { [key: string]: any },
|
slots?: { [key: string]: any },
|
||||||
on?: { [key: string]: Function },
|
on?: { [key: string]: Function },
|
||||||
hooksConfig?: any,
|
hooksConfig?: any,
|
||||||
}): Promise<Locator>;
|
}): Promise<MountResult>;
|
||||||
mount<Props>(component: any, options: {
|
mount<Props>(component: any, options: {
|
||||||
props: Props,
|
props: Props,
|
||||||
slots?: { [key: string]: any },
|
slots?: { [key: string]: any },
|
||||||
on?: { [key: string]: Function },
|
on?: { [key: string]: Function },
|
||||||
hooksConfig?: any,
|
hooksConfig?: any,
|
||||||
}): Promise<Locator>;
|
}): Promise<MountResult>;
|
||||||
unmount(component: Locator): Promise<void>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const test: TestType<
|
export const test: TestType<
|
||||||
|
|
|
||||||
13
packages/playwright-ct-vue/index.d.ts
vendored
13
packages/playwright-ct-vue/index.d.ts
vendored
|
|
@ -34,22 +34,25 @@ export type PlaywrightTestConfig = Omit<BasePlaywrightTestConfig, 'use'> & {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface MountResult<Props = { [key: string]: any }> extends Locator {
|
||||||
|
unmount(): Promise<void>;
|
||||||
|
setProps(props: Partial<Props>): Promise<void>
|
||||||
|
}
|
||||||
|
|
||||||
export interface ComponentFixtures {
|
export interface ComponentFixtures {
|
||||||
mount(component: JSX.Element): Promise<Locator>;
|
mount(component: JSX.Element): Promise<MountResult>;
|
||||||
mount(component: any, options?: {
|
mount(component: any, options?: {
|
||||||
props?: { [key: string]: any },
|
props?: { [key: string]: any },
|
||||||
slots?: { [key: string]: any },
|
slots?: { [key: string]: any },
|
||||||
on?: { [key: string]: Function },
|
on?: { [key: string]: Function },
|
||||||
hooksConfig?: any,
|
hooksConfig?: any,
|
||||||
}): Promise<Locator>;
|
}): Promise<MountResult>;
|
||||||
mount<Props>(component: any, options: {
|
mount<Props>(component: any, options: {
|
||||||
props: Props,
|
props: Props,
|
||||||
slots?: { [key: string]: any },
|
slots?: { [key: string]: any },
|
||||||
on?: { [key: string]: Function },
|
on?: { [key: string]: Function },
|
||||||
hooksConfig?: any,
|
hooksConfig?: any,
|
||||||
}): Promise<Locator>;
|
}): Promise<MountResult<Props>>;
|
||||||
unmount(locator: Locator): Promise<void>;
|
|
||||||
setProps<Props = { [key: string]: any }>(locator: Locator, props: Props): Promise<void>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const test: TestType<
|
export const test: TestType<
|
||||||
|
|
|
||||||
11
packages/playwright-ct-vue2/index.d.ts
vendored
11
packages/playwright-ct-vue2/index.d.ts
vendored
|
|
@ -34,21 +34,24 @@ export type PlaywrightTestConfig = Omit<BasePlaywrightTestConfig, 'use'> & {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface MountResult extends Locator {
|
||||||
|
unmount(): Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ComponentFixtures {
|
export interface ComponentFixtures {
|
||||||
mount(component: JSX.Element): Promise<Locator>;
|
mount(component: JSX.Element): Promise<MountResult>;
|
||||||
mount(component: any, options?: {
|
mount(component: any, options?: {
|
||||||
props?: { [key: string]: any },
|
props?: { [key: string]: any },
|
||||||
slots?: { [key: string]: any },
|
slots?: { [key: string]: any },
|
||||||
on?: { [key: string]: Function },
|
on?: { [key: string]: Function },
|
||||||
hooksConfig?: any,
|
hooksConfig?: any,
|
||||||
}): Promise<Locator>;
|
}): Promise<MountResult>;
|
||||||
mount<Props>(component: any, options: {
|
mount<Props>(component: any, options: {
|
||||||
props: Props,
|
props: Props,
|
||||||
slots?: { [key: string]: any },
|
slots?: { [key: string]: any },
|
||||||
on?: { [key: string]: Function },
|
on?: { [key: string]: Function },
|
||||||
hooksConfig?: any,
|
hooksConfig?: any,
|
||||||
}): Promise<Locator>;
|
}): Promise<MountResult>;
|
||||||
unmount(locator: Locator): Promise<void>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const test: TestType<
|
export const test: TestType<
|
||||||
|
|
|
||||||
|
|
@ -19,11 +19,14 @@ import type { Component, JsxComponent, ObjectComponentOptions } from '../types/c
|
||||||
|
|
||||||
let boundCallbacksForMount: Function[] = [];
|
let boundCallbacksForMount: Function[] = [];
|
||||||
|
|
||||||
|
interface MountResult extends Locator {
|
||||||
|
unmount: (locator: Locator) => Promise<void>;
|
||||||
|
setProps: (props: { [key: string]: any }) => Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
export const fixtures: Fixtures<
|
export const fixtures: Fixtures<
|
||||||
PlaywrightTestArgs & PlaywrightTestOptions & {
|
PlaywrightTestArgs & PlaywrightTestOptions & {
|
||||||
mount: (component: any, options: any) => Promise<Locator>;
|
mount: (component: any, options: any) => Promise<MountResult>;
|
||||||
unmount: (locator: Locator) => Promise<void>;
|
|
||||||
setProps: (locator: Locator, props: { [key: string]: any }) => Promise<void>;
|
|
||||||
},
|
},
|
||||||
PlaywrightWorkerArgs & PlaywrightWorkerOptions & { _ctWorker: { context: BrowserContext | undefined, hash: string } },
|
PlaywrightWorkerArgs & PlaywrightWorkerOptions & { _ctWorker: { context: BrowserContext | undefined, hash: string } },
|
||||||
{ _contextFactory: (options?: BrowserContextOptions) => Promise<BrowserContext>, _contextReuseEnabled: boolean }> = {
|
{ _contextFactory: (options?: BrowserContextOptions) => Promise<BrowserContext>, _contextReuseEnabled: boolean }> = {
|
||||||
|
|
@ -49,27 +52,23 @@ export const fixtures: Fixtures<
|
||||||
const selector = await (page as any)._wrapApiCall(async () => {
|
const selector = await (page as any)._wrapApiCall(async () => {
|
||||||
return await innerMount(page, component, options);
|
return await innerMount(page, component, options);
|
||||||
}, true);
|
}, true);
|
||||||
return page.locator(selector);
|
const locator = page.locator(selector);
|
||||||
|
return Object.assign(locator, {
|
||||||
|
unmount: async () => {
|
||||||
|
await locator.evaluate(async element => {
|
||||||
|
const rootElement = document.getElementById('root')!;
|
||||||
|
await window.playwrightUnmount(element, rootElement);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
setProps: async (props: { [key: string]: any }) => {
|
||||||
|
await locator.evaluate(async (element, props) => {
|
||||||
|
return await window.playwrightSetProps(element, props);
|
||||||
|
}, props);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
boundCallbacksForMount = [];
|
boundCallbacksForMount = [];
|
||||||
},
|
},
|
||||||
|
|
||||||
unmount: async ({}, use) => {
|
|
||||||
await use(async (locator: Locator) => {
|
|
||||||
await locator.evaluate(async element => {
|
|
||||||
const rootElement = document.getElementById('root')!;
|
|
||||||
await window.playwrightUnmount(element, rootElement);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
setProps: async ({}, use) => {
|
|
||||||
await use(async (locator: Locator, props: { [key: string]: any }) => {
|
|
||||||
return await locator.evaluate(async (element, props) => {
|
|
||||||
return await window.playwrightSetProps(element, props);
|
|
||||||
}, props);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
async function innerMount(page: Page, jsxOrType: JsxComponent | string, options: ObjectComponentOptions = {}): Promise<string> {
|
async function innerMount(page: Page, jsxOrType: JsxComponent | string, options: ObjectComponentOptions = {}): Promise<string> {
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,9 @@ test('should configure app', async ({ page, mount }) => {
|
||||||
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}', 'After mount']);
|
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}', 'After mount']);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should unmount', async ({ page, mount, unmount }) => {
|
test('should unmount', async ({ page, mount }) => {
|
||||||
const component = await mount(<App></App>);
|
const component = await mount(<App></App>);
|
||||||
await expect(page.locator('#root')).toContainText('Hello Vite + React!');
|
await expect(page.locator('#root')).toContainText('Hello Vite + React!');
|
||||||
await unmount(component);
|
await component.unmount();
|
||||||
await expect(page.locator('#root')).not.toContainText('Hello Vite + React!');
|
await expect(page.locator('#root')).not.toContainText('Hello Vite + React!');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -48,13 +48,13 @@ test('should configure app', async ({ page, mount }) => {
|
||||||
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}', 'After mount']);
|
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}', 'After mount']);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should unmount', async ({ page, mount, unmount }) => {
|
test('should unmount', async ({ page, mount }) => {
|
||||||
const component = await mount(Counter, {
|
const component = await mount(Counter, {
|
||||||
props: {
|
props: {
|
||||||
suffix: 'my suffix',
|
suffix: 'my suffix',
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
await expect(page.locator('#root')).toContainText('my suffix')
|
await expect(page.locator('#root')).toContainText('my suffix')
|
||||||
await unmount(component);
|
await component.unmount();
|
||||||
await expect(page.locator('#root')).not.toContainText('my suffix');
|
await expect(page.locator('#root')).not.toContainText('my suffix');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,10 @@ test('props should work', async ({ mount }) => {
|
||||||
await expect(component).toContainText('Submit')
|
await expect(component).toContainText('Submit')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('update props should work', async ({ mount, setProps }) => {
|
test('update props should work', async ({ mount }) => {
|
||||||
const component = await mount(<Button title='Submit'></Button>);
|
const component = await mount(<Button title='Submit'></Button>);
|
||||||
await expect(component).toContainText('Submit');
|
await expect(component).toContainText('Submit');
|
||||||
await setProps(component, { title: 'Loading' });
|
await component.setProps({ title: 'Loading' });
|
||||||
await expect(component).toContainText('Loading');
|
await expect(component).toContainText('Loading');
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
import { test, expect } from '@playwright/experimental-ct-vue'
|
import { test, expect } from '@playwright/experimental-ct-vue'
|
||||||
|
|
||||||
import has from 'has'
|
|
||||||
import Button from './components/Button.vue'
|
import Button from './components/Button.vue'
|
||||||
import DefaultSlot from './components/DefaultSlot.vue'
|
import DefaultSlot from './components/DefaultSlot.vue'
|
||||||
import NamedSlots from './components/NamedSlots.vue'
|
import NamedSlots from './components/NamedSlots.vue'
|
||||||
|
|
@ -17,14 +15,14 @@ test('props should work', async ({ mount }) => {
|
||||||
await expect(component).toContainText('Submit')
|
await expect(component).toContainText('Submit')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('update props should work', async ({ mount, setProps }) => {
|
test('update props should work', async ({ mount }) => {
|
||||||
const component = await mount(Button, {
|
const component = await mount(Button, {
|
||||||
props: {
|
props: {
|
||||||
title: 'Submit'
|
title: 'Submit'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
await expect(component).toContainText('Submit');
|
await expect(component).toContainText('Submit');
|
||||||
await setProps(component, { title: 'Loading' });
|
await component.setProps({ title: 'Loading' });
|
||||||
await expect(component).toContainText('Loading');
|
await expect(component).toContainText('Loading');
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,15 +16,15 @@ test('props should work', async ({ mount }) => {
|
||||||
await expect(component).toContainText('Submit')
|
await expect(component).toContainText('Submit')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('update props should work', async ({ mount, setProps }) => {
|
test('update props should work', async ({ mount }) => {
|
||||||
const component = await mount(Button, {
|
const component = await mount(Button, {
|
||||||
props: {
|
props: {
|
||||||
title: 'Submit'
|
title: 'Submit'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
await expect(component).toContainText('Submit')
|
await expect(component).toContainText('Submit')
|
||||||
await setProps(component, { title: 'Loading' });
|
await component.setProps({ title: 'Loading' })
|
||||||
await expect(component).toContainText('Loading');
|
await expect(component).toContainText('Loading')
|
||||||
})
|
})
|
||||||
|
|
||||||
test('event should work', async ({ mount }) => {
|
test('event should work', async ({ mount }) => {
|
||||||
|
|
@ -90,13 +90,13 @@ test('should run hooks', async ({ page, mount }) => {
|
||||||
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}, app: true', 'After mount el: HTMLButtonElement'])
|
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}, app: true', 'After mount el: HTMLButtonElement'])
|
||||||
})
|
})
|
||||||
|
|
||||||
test('should unmount', async ({ page, mount, unmount }) => {
|
test('should unmount', async ({ page, mount }) => {
|
||||||
const component = await mount(Button, {
|
const component = await mount(Button, {
|
||||||
props: {
|
props: {
|
||||||
title: 'Submit'
|
title: 'Submit'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
await expect(page.locator('#root')).toContainText('Submit')
|
await expect(page.locator('#root')).toContainText('Submit')
|
||||||
await unmount(component);
|
await component.unmount();
|
||||||
await expect(page.locator('#root')).not.toContainText('Submit');
|
await expect(page.locator('#root')).not.toContainText('Submit');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -73,13 +73,13 @@ test('should run hooks', async ({ page, mount }) => {
|
||||||
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}', 'After mount el: HTMLButtonElement'])
|
expect(messages).toEqual(['Before mount: {\"route\":\"A\"}', 'After mount el: HTMLButtonElement'])
|
||||||
})
|
})
|
||||||
|
|
||||||
test('should unmount', async ({ page, mount, unmount }) => {
|
test('should unmount', async ({ page, mount }) => {
|
||||||
const component = await mount(Button, {
|
const component = await mount(Button, {
|
||||||
props: {
|
props: {
|
||||||
title: 'Submit'
|
title: 'Submit'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
await expect(page.locator('#root')).toContainText('Submit')
|
await expect(page.locator('#root')).toContainText('Submit')
|
||||||
await unmount(component);
|
await component.unmount();
|
||||||
await expect(page.locator('#root')).not.toContainText('Submit');
|
await expect(page.locator('#root')).not.toContainText('Submit');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue