From 91d529d042b27a7da1bfbec692ffe77adcb1d6c1 Mon Sep 17 00:00:00 2001 From: dobromir-hristov Date: Thu, 14 May 2020 10:35:03 +0300 Subject: [PATCH 1/3] fix: allow passing an event name to the `emitted` method --- src/vue-wrapper.ts | 4 ++-- tests/emit.spec.ts | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/vue-wrapper.ts b/src/vue-wrapper.ts index 1fda76870..8ccc54130 100644 --- a/src/vue-wrapper.ts +++ b/src/vue-wrapper.ts @@ -62,10 +62,10 @@ export class VueWrapper { return true } - emitted(): Record { + emitted(eventName?: string): Record | undefined { // TODO Should we define this? // @ts-ignore - return this.vm.__emitted + return eventName ? this.vm.__emitted[eventName] : this.vm.__emitted } html() { diff --git a/tests/emit.spec.ts b/tests/emit.spec.ts index b2cd0d215..1db828249 100644 --- a/tests/emit.spec.ts +++ b/tests/emit.spec.ts @@ -96,4 +96,29 @@ describe('emitted', () => { wrapper.find('button').trigger('click') expect(wrapper.emitted().parent[1]).toEqual(['foo', 'bar']) }) + + it('should allow passing the name of an event', () => { + const Component = defineComponent({ + name: 'ContextEmit', + + setup(props, ctx) { + return () => + h('div', [ + h('button', { onClick: () => ctx.emit('hello', 'foo', 'bar') }) + ]) + } + }) + const wrapper = mount(Component) + + // test what happens if you pass a none existent event + expect(wrapper.emitted('hello')).toEqual(undefined) + + wrapper.find('button').trigger('click') + expect(wrapper.emitted('hello')[0]).toEqual(['foo', 'bar']) + + wrapper.find('button').trigger('click') + expect(wrapper.emitted('hello')[1]).toEqual(['foo', 'bar']) + + expect(wrapper.emitted('hello')).toHaveLength(2) + }) }) From 9a5f84e14be4d84667e1e686308e371702e0e444 Mon Sep 17 00:00:00 2001 From: Lachlan Miller Date: Sat, 23 May 2020 00:22:54 +1000 Subject: [PATCH 2/3] types: work on typing emitted --- src/vue-wrapper.ts | 12 ++++++++---- test-dts/wrapper.d-test.ts | 9 +++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/vue-wrapper.ts b/src/vue-wrapper.ts index 8ccc54130..cd8c7d6fc 100644 --- a/src/vue-wrapper.ts +++ b/src/vue-wrapper.ts @@ -62,10 +62,14 @@ export class VueWrapper { return true } - emitted(eventName?: string): Record | undefined { - // TODO Should we define this? - // @ts-ignore - return eventName ? this.vm.__emitted[eventName] : this.vm.__emitted + emitted(): Record + emitted(eventName?: string): T[] + emitted(eventName?: string): T[] | Record { + if (eventName) { + const emitted = (this.vm['__emitted'] as Record)[eventName] + return emitted + } + return this.vm['__emitted'] as Record } html() { diff --git a/test-dts/wrapper.d-test.ts b/test-dts/wrapper.d-test.ts index b71a50b68..a3a241abd 100644 --- a/test-dts/wrapper.d-test.ts +++ b/test-dts/wrapper.d-test.ts @@ -61,6 +61,15 @@ expectType(lineArray[0].element) byClassArray = domWrapper.findAll('.todo') expectType(byClassArray[0].element) +// emitted +// event name +let incrementEvent = wrapper.emitted<{ count: number }>('increment') +expectType<{ count: number }>(incrementEvent[0]) + +// without event name +let allEvents = wrapper.emitted() +expectType>(allEvents) + // get // HTML element selector let input = wrapper.get('input') From d4f2070d8e1b065fea92183f8e88827574238773 Mon Sep 17 00:00:00 2001 From: Lachlan Miller Date: Sat, 23 May 2020 00:24:47 +1000 Subject: [PATCH 3/3] types: add tsd test for emitted --- test-dts/wrapper.d-test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-dts/wrapper.d-test.ts b/test-dts/wrapper.d-test.ts index 02f680b49..fd56848ea 100644 --- a/test-dts/wrapper.d-test.ts +++ b/test-dts/wrapper.d-test.ts @@ -68,7 +68,7 @@ expectType<{ count: number }>(incrementEvent[0]) // without event name let allEvents = wrapper.emitted() -expectType>(allEvents) +expectType>(allEvents) // get // HTML element selector