1- import Vue from 'vue'
1+ import { mount , Wrapper } from '@vue/test-utils'
2+ import Vue , { CreateElement } from 'vue'
23import Component from 'vue-class-component'
34import { Emit } from '../../src/decorators/Emit'
45
6+ const mockFn = jest . fn ( )
7+
58describe ( Emit , ( ) => {
69 describe ( 'when event name is given' , ( ) => {
710 @Component
@@ -11,90 +14,70 @@ describe(Emit, () => {
1114 @Emit ( 'reset' ) resetCount ( ) {
1215 this . count = 0
1316 }
14- }
1517
16- const child = new ChildComponent ( )
17- const mockFn = jest . fn ( )
18- child . $emit = mockFn
19-
20- beforeAll ( ( ) => {
21- child . resetCount ( )
22- } )
23-
24- test ( 'call $emit method' , ( ) => {
25- expect ( mockFn ) . toHaveBeenCalled ( )
26- } )
27-
28- test ( 'emit event with given name' , ( ) => {
29- expect ( mockFn . mock . calls [ 0 ] [ 0 ] ) . toBe ( 'reset' )
30- } )
31- } )
18+ render ( h : CreateElement ) {
19+ return h ( 'div' )
20+ }
21+ }
3222
33- describe ( 'when argument is given' , ( ) => {
3423 @Component
35- class ChildComponent extends Vue {
36- count = 0
37-
38- @Emit ( ) increment ( n : number ) {
39- this . count += n
24+ class ParentComponent extends Vue {
25+ $refs ! : { child : ChildComponent }
26+ render ( h : CreateElement ) {
27+ return h ( ChildComponent , { on : { reset : mockFn } , ref : 'child' } )
4028 }
4129 }
4230
43- const child = new ChildComponent ( )
44- const mockFn = jest . fn ( )
45- child . $emit = mockFn
46-
47- const value = 30
31+ let wrapper : Wrapper < ParentComponent >
4832
49- beforeAll ( ( ) => {
50- child . increment ( value )
33+ beforeEach ( ( ) => {
34+ wrapper = mount ( ParentComponent )
35+ wrapper . vm . $refs . child . resetCount ( )
5136 } )
5237
5338 test ( 'call $emit method' , ( ) => {
5439 expect ( mockFn ) . toHaveBeenCalled ( )
5540 } )
5641
57- test ( 'emit event with method name' , ( ) => {
58- expect ( mockFn . mock . calls [ 0 ] [ 0 ] ) . toBe ( 'increment' )
59- } )
60-
61- test ( 'emit event with argument' , ( ) => {
62- expect ( mockFn . mock . calls [ 0 ] [ 1 ] ) . toBe ( value )
42+ test ( 'emit event with given name' , ( ) => {
43+ expect ( mockFn ) . toHaveBeenCalledWith ( )
6344 } )
6445 } )
6546
66- describe ( 'when multiple arguments is given' , ( ) => {
47+ describe ( 'when arguments are given' , ( ) => {
6748 @Component
6849 class ChildComponent extends Vue {
6950 count = 0
7051
7152 @Emit ( ) increment ( n1 : number , n2 : number ) {
7253 this . count += n1 + n2
7354 }
74- }
7555
76- const child = new ChildComponent ( )
77- const mockFn = jest . fn ( )
78- child . $emit = mockFn
56+ render ( h : CreateElement ) {
57+ return h ( 'div' )
58+ }
59+ }
7960
80- const value1 = 30
81- const value2 = 40
61+ @Component
62+ class ParentComponent extends Vue {
63+ $refs ! : { child : ChildComponent }
64+ render ( h : CreateElement ) {
65+ return h ( ChildComponent , { on : { increment : mockFn } , ref : 'child' } )
66+ }
67+ }
8268
83- beforeAll ( ( ) => {
84- child . increment ( value1 , value2 )
85- } )
69+ let wrapper : Wrapper < ParentComponent >
8670
87- test ( 'call $emit method' , ( ) => {
88- expect ( mockFn ) . toHaveBeenCalled ( )
89- } )
71+ const NEW_VALUE1 = 30
72+ const NEW_VALUE2 = 40
9073
91- test ( 'emit event with method name' , ( ) => {
92- expect ( mockFn . mock . calls [ 0 ] [ 0 ] ) . toBe ( 'increment' )
74+ beforeEach ( ( ) => {
75+ wrapper = mount ( ParentComponent )
76+ wrapper . vm . $refs . child . increment ( NEW_VALUE1 , NEW_VALUE2 )
9377 } )
9478
9579 test ( 'emit event with multiple arguments' , ( ) => {
96- expect ( mockFn . mock . calls [ 0 ] [ 1 ] ) . toBe ( value1 )
97- expect ( mockFn . mock . calls [ 0 ] [ 2 ] ) . toBe ( value2 )
80+ expect ( mockFn ) . toHaveBeenCalledWith ( NEW_VALUE1 , NEW_VALUE2 )
9881 } )
9982 } )
10083
@@ -106,62 +89,74 @@ describe(Emit, () => {
10689 @Emit ( ) increment ( n1 : number , n2 : number ) {
10790 return n1 + n2
10891 }
109- }
11092
111- const child = new ChildComponent ( )
112- const mockFn = jest . fn ( )
113- child . $emit = mockFn
93+ render ( h : CreateElement ) {
94+ return h ( 'div' )
95+ }
96+ }
11497
115- const value1 = 30
116- const value2 = 40
98+ @Component
99+ class ParentComponent extends Vue {
100+ $refs ! : { child : ChildComponent }
101+ render ( h : CreateElement ) {
102+ return h ( ChildComponent , { on : { increment : mockFn } , ref : 'child' } )
103+ }
104+ }
117105
118- beforeAll ( ( ) => {
119- child . increment ( value1 , value2 )
120- } )
106+ let wrapper : Wrapper < ParentComponent >
121107
122- test ( 'call $emit method' , ( ) => {
123- expect ( mockFn ) . toHaveBeenCalled ( )
124- } )
108+ const NEW_VALUE1 = 30
109+ const NEW_VALUE2 = 40
125110
126- test ( 'emit event with method name' , ( ) => {
127- expect ( mockFn . mock . calls [ 0 ] [ 0 ] ) . toBe ( 'increment' )
111+ beforeEach ( ( ) => {
112+ wrapper = mount ( ParentComponent )
113+ wrapper . vm . $refs . child . increment ( NEW_VALUE1 , NEW_VALUE2 )
128114 } )
129115
130116 test ( 'emit event with multiple arguments' , ( ) => {
131- expect ( mockFn . mock . calls [ 0 ] [ 1 ] ) . toBe ( value1 + value2 )
132- expect ( mockFn . mock . calls [ 0 ] [ 2 ] ) . toBe ( value1 )
133- expect ( mockFn . mock . calls [ 0 ] [ 3 ] ) . toBe ( value2 )
117+ expect ( mockFn ) . toHaveBeenCalledWith (
118+ NEW_VALUE1 + NEW_VALUE2 ,
119+ NEW_VALUE1 ,
120+ NEW_VALUE2 ,
121+ )
134122 } )
135123 } )
136124
137125 describe ( 'when promise has been returned' , ( ) => {
138- const value = 10
126+ const VALUE = 10
139127
140128 @Component
141129 class ChildComponent extends Vue {
142130 @Emit ( ) promise ( ) {
143- return Promise . resolve ( value )
131+ return Promise . resolve ( VALUE )
132+ }
133+
134+ render ( h : CreateElement ) {
135+ return h ( 'div' )
144136 }
145137 }
146138
147- const child = new ChildComponent ( )
148- const mockFn = jest . fn ( )
149- child . $emit = mockFn
139+ @Component
140+ class ParentComponent extends Vue {
141+ $refs ! : { child : ChildComponent }
142+ render ( h : CreateElement ) {
143+ return h ( ChildComponent , { on : { promise : mockFn } , ref : 'child' } )
144+ }
145+ }
150146
151- beforeAll ( async ( ) => {
152- await child . promise ( )
147+ let wrapper : Wrapper < ParentComponent >
148+
149+ beforeEach ( async ( ) => {
150+ wrapper = mount ( ParentComponent )
151+ await wrapper . vm . $refs . child . promise ( )
153152 } )
154153
155154 test ( 'call $emit method' , ( ) => {
156155 expect ( mockFn ) . toHaveBeenCalled ( )
157156 } )
158157
159- test ( 'emit event with method name' , ( ) => {
160- expect ( mockFn . mock . calls [ 0 ] [ 0 ] ) . toBe ( 'promise' )
161- } )
162-
163158 test ( 'emit even with resolved value' , ( ) => {
164- expect ( mockFn . mock . calls [ 0 ] [ 1 ] ) . toBe ( value )
159+ expect ( mockFn ) . toHaveBeenCalledWith ( VALUE )
165160 } )
166161 } )
167162} )
0 commit comments