From 6a1a73e651ffcdbe9052998204e583eb4e61fb40 Mon Sep 17 00:00:00 2001 From: Konstantin Epishev Date: Mon, 24 May 2021 13:17:33 +0200 Subject: [PATCH 1/2] feat: add draft for fireEvent.emit relates to issues #233 --- src/fire-event.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/fire-event.js b/src/fire-event.js index 6a87d7a..7c217cb 100644 --- a/src/fire-event.js +++ b/src/fire-event.js @@ -80,6 +80,17 @@ fireEvent.update = (elem, value) => { return null } +// fireEvent.emit is a syntax sugar to fire custom events on vue-elements. +// Custom events can't be fired just with fireEvent, event it has the same name +// as native one. +fireEvent.emit = async (elem, eventName, value) => { + if (!elem.__vue__) { + throw new Error(`Unable to fire a ${eventName} event – please provide a VUE component.`) + } + + await elem.__vue__.$emit(eventName, value) +} + function warnOnChangeOrInputEventCalledDirectly(eventValue, eventKey) { if (process.env.VTL_SKIP_WARN_EVENT_UPDATE) return From 288baacc641424b7c88a105e5162ec8160e3d742 Mon Sep 17 00:00:00 2001 From: Konstantin Epishev Date: Mon, 24 May 2021 13:37:10 +0200 Subject: [PATCH 2/2] test: add specs for fireEvent.emit related issues #233 --- .../components/WithChildComponent/Child.vue | 13 ++++++++++++ .../components/WithChildComponent/Parent.vue | 20 +++++++++++++++++++ src/__tests__/vue-custom-event.js | 14 +++++++++++++ src/fire-event.js | 5 ++++- 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/__tests__/components/WithChildComponent/Child.vue create mode 100644 src/__tests__/components/WithChildComponent/Parent.vue create mode 100644 src/__tests__/vue-custom-event.js diff --git a/src/__tests__/components/WithChildComponent/Child.vue b/src/__tests__/components/WithChildComponent/Child.vue new file mode 100644 index 0000000..9b51fd1 --- /dev/null +++ b/src/__tests__/components/WithChildComponent/Child.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/__tests__/components/WithChildComponent/Parent.vue b/src/__tests__/components/WithChildComponent/Parent.vue new file mode 100644 index 0000000..66be3f7 --- /dev/null +++ b/src/__tests__/components/WithChildComponent/Parent.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/__tests__/vue-custom-event.js b/src/__tests__/vue-custom-event.js new file mode 100644 index 0000000..068803b --- /dev/null +++ b/src/__tests__/vue-custom-event.js @@ -0,0 +1,14 @@ +import {render, fireEvent} from '@testing-library/vue' +import '@testing-library/jest-dom/extend-expect' +import Component from './components/WithChildComponent/Parent.vue' + +test('Custom vue events handling', async () => { + const payload = {foo: 'bar'} + const {getByTestId, emitted} = render(Component) + + expect(emitted.custom).toBeUndefined() + + await fireEvent.emit(getByTestId('child'), 'custom', payload) + + expect(emitted().custom).toEqual([[payload]]) +}) diff --git a/src/fire-event.js b/src/fire-event.js index 7c217cb..b270e53 100644 --- a/src/fire-event.js +++ b/src/fire-event.js @@ -83,9 +83,12 @@ fireEvent.update = (elem, value) => { // fireEvent.emit is a syntax sugar to fire custom events on vue-elements. // Custom events can't be fired just with fireEvent, event it has the same name // as native one. +// Examples: https://github.com/testing-library/vue-testing-library/blob/master/src/__tests__/vue-custom-event.js fireEvent.emit = async (elem, eventName, value) => { if (!elem.__vue__) { - throw new Error(`Unable to fire a ${eventName} event – please provide a VUE component.`) + throw new Error( + `Unable to fire a ${eventName} event – please provide a VUE component.`, + ) } await elem.__vue__.$emit(eventName, value)