diff --git a/packages/playwright-ct-vue/registerSource.mjs b/packages/playwright-ct-vue/registerSource.mjs index 7d743a1092..4bd9c2b67d 100644 --- a/packages/playwright-ct-vue/registerSource.mjs +++ b/packages/playwright-ct-vue/registerSource.mjs @@ -52,7 +52,7 @@ function isComponent(component) { */ async function __pwResolveComponent(component) { if (!isComponent(component)) - return + return; let componentFactory = __pwLoaderRegistry.get(component.type); if (!componentFactory) { @@ -68,11 +68,11 @@ async function __pwResolveComponent(component) { if (!componentFactory && component.type[0].toUpperCase() === component.type[0]) throw new Error(`Unregistered component: ${component.type}. Following components are registered: ${[...__pwRegistry.keys()]}`); - if(componentFactory) - __pwRegistry.set(component.type, await componentFactory()) + if (componentFactory) + __pwRegistry.set(component.type, await componentFactory()); if ('children' in component) - await Promise.all(component.children.map(child => __pwResolveComponent(child))) + await Promise.all(component.children.map(child => __pwResolveComponent(child))); } const __pwAllListeners = new Map(); @@ -217,7 +217,7 @@ function __pwWrapFunctions(slots) { function __pwCreateWrapper(component) { const { Component, props, slots, listeners } = __pwCreateComponent(component); // @ts-ignore - const wrapper = __pwH(Component, props, slots); + const wrapper = __pwH(Component, { ...props, ...listeners }, slots); __pwAllListeners.set(wrapper, listeners); return wrapper; } @@ -281,7 +281,7 @@ window.playwrightUpdate = async (rootElement, component) => { if (!wrapper.component) throw new Error('Updating a native HTML element is not supported'); - + const { slots, listeners, props } = __pwCreateComponent(component); wrapper.component.slots = __pwWrapFunctions(slots); diff --git a/tests/components/ct-vue-cli/src/components/Button.vue b/tests/components/ct-vue-cli/src/components/Button.vue index f597f2803d..236f26c335 100644 --- a/tests/components/ct-vue-cli/src/components/Button.vue +++ b/tests/components/ct-vue-cli/src/components/Button.vue @@ -1,12 +1,14 @@ diff --git a/tests/components/ct-vue-cli/tests/events/events.spec.ts b/tests/components/ct-vue-cli/tests/events/events.spec.ts index e5a6df440e..6d24480e9b 100644 --- a/tests/components/ct-vue-cli/tests/events/events.spec.ts +++ b/tests/components/ct-vue-cli/tests/events/events.spec.ts @@ -14,3 +14,17 @@ test('emit an submit event when the button is clicked', async ({ mount }) => { await component.click(); expect(messages).toEqual(['hello']); }); + +test('emit a falltrough event when the button is double clicked', async ({ mount }) => { + const messages: string[] = []; + const component = await mount(Button, { + props: { + title: 'Submit', + }, + on: { + dbclick: (message: string) => messages.push(message), + }, + }); + await component.dblclick(); + expect(messages).toEqual(['fallthroughEvent']); +}); diff --git a/tests/components/ct-vue-cli/tests/events/events.spec.tsx b/tests/components/ct-vue-cli/tests/events/events.spec.tsx index 24ca6568f2..1534b6af11 100644 --- a/tests/components/ct-vue-cli/tests/events/events.spec.tsx +++ b/tests/components/ct-vue-cli/tests/events/events.spec.tsx @@ -16,6 +16,20 @@ test('emit an submit event when the button is clicked', async ({ mount }) => { expect(messages).toEqual(['hello']); }); +test('emit a falltrough event when the button is double clicked', async ({ mount }) => { + const messages: string[] = []; + const component = await mount( +