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(
+