diff --git a/src/__tests__/components/WithChildComponent/Child.vue b/src/__tests__/components/WithChildComponent/Child.vue new file mode 100644 index 00000000..9b51fd10 --- /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 00000000..66be3f73 --- /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 00000000..068803bc --- /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 6a87d7ac..b270e53c 100644 --- a/src/fire-event.js +++ b/src/fire-event.js @@ -80,6 +80,20 @@ 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. +// 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.`, + ) + } + + await elem.__vue__.$emit(eventName, value) +} + function warnOnChangeOrInputEventCalledDirectly(eventValue, eventKey) { if (process.env.VTL_SKIP_WARN_EVENT_UPDATE) return