@@ -6,24 +6,15 @@ const localVue = new createLocalVue()
6
6
localVue . use ( VueRouter )
7
7
const router = new VueRouter ( )
8
8
9
- //needed for @popperjs /core
10
- global . document . createRange = ( ) => ( {
11
- setStart : ( ) => { } ,
12
- setEnd : ( ) => { } ,
13
- commonAncestorContainer : {
14
- nodeName : 'BODY' ,
15
- ownerDocument : document ,
16
- } ,
17
- } )
18
-
19
- const ComponentName = 'CDropdown'
20
9
const wrapper = mount ( Component , {
21
10
router,
22
11
localVue
23
12
} )
24
13
25
- const customWrapper = mount ( Component , {
14
+ const ComponentName = 'CDropdown'
26
15
16
+ const generateWrapper = ( ) => mount ( Component , {
17
+ attachToDocument : true ,
27
18
propsData : {
28
19
togglerText : 'Dropdown button' ,
29
20
show : true ,
@@ -43,7 +34,7 @@ const customWrapper = mount(Component, {
43
34
}
44
35
} )
45
36
46
- const navWrapper = mount ( Component , {
37
+ const generateNavWrapper = ( ) => mount ( Component , {
47
38
propsData : {
48
39
addMenuClasses : 'additional-menu-class' ,
49
40
addTogglerClasses : 'additional-toggler-class' ,
@@ -68,31 +59,10 @@ describe(ComponentName, () => {
68
59
expect ( wrapper . element ) . toMatchSnapshot ( )
69
60
} )
70
61
it ( 'renders custom wrapper correctly' , ( ) => {
71
- expect ( customWrapper . element ) . toMatchSnapshot ( )
62
+ expect ( generateWrapper ( ) . element ) . toMatchSnapshot ( )
72
63
} )
73
64
it ( 'renders correctly inNav' , ( ) => {
74
- expect ( navWrapper . element ) . toMatchSnapshot ( )
75
- } )
76
- it ( 'properly toggle dropdown' , ( ) => {
77
- const toggle = ( ) => {
78
- jest . useFakeTimers ( )
79
- wrapper . find ( 'button' ) . trigger ( 'click' )
80
- jest . runAllTimers ( )
81
- }
82
- const hide = ( ) => {
83
- jest . useFakeTimers ( )
84
- wrapper . vm . hide ( )
85
- jest . runAllTimers ( )
86
- }
87
-
88
- expect ( wrapper . vm . visible ) . toBe ( false )
89
- toggle ( )
90
- expect ( wrapper . vm . visible ) . toBe ( true )
91
- //mimics v-on-clickaway
92
- hide ( )
93
- expect ( wrapper . vm . visible ) . toBe ( false )
94
- hide ( )
95
- expect ( wrapper . vm . visible ) . toBe ( false )
65
+ expect ( generateNavWrapper ( ) . element ) . toMatchSnapshot ( )
96
66
} )
97
67
it ( 'toggles when show prop is changed' , ( ) => {
98
68
expect ( wrapper . vm . visible ) . toBe ( false )
@@ -104,25 +74,34 @@ describe(ComponentName, () => {
104
74
wrapper . vm . $router . push ( 'new-route-name' )
105
75
expect ( wrapper . vm . visible ) . toBe ( false )
106
76
} )
107
- it ( 'does not open when dropdown is disabled' , ( ) => {
77
+ it ( 'close, but does not open on click when dropdown is disabled' , ( ) => {
78
+ const customWrapper = generateWrapper ( )
108
79
const toggle = ( ) => {
109
- jest . useFakeTimers ( )
110
80
customWrapper . find ( '.dropdown-toggle-split' ) . trigger ( 'click' )
111
- jest . runAllTimers ( )
112
81
}
113
-
82
+
114
83
expect ( customWrapper . vm . visible ) . toBe ( true )
115
- customWrapper . setProps ( { disabled : true } )
84
+ customWrapper . setProps ( {
85
+ disabled : true
86
+ } )
116
87
toggle ( )
117
88
expect ( customWrapper . vm . visible ) . toBe ( false )
118
89
toggle ( )
119
90
expect ( customWrapper . vm . visible ) . toBe ( false )
91
+ } )
92
+ it ( 'Closes dropdown on outside click' , ( ) => {
93
+ const customWrapper = generateWrapper ( )
94
+
95
+ expect ( customWrapper . vm . visible ) . toBe ( true )
96
+ customWrapper . vm . $el . getElementsByClassName ( 'dropdown-menu' ) [ 0 ] . click ( )
97
+ expect ( customWrapper . vm . visible ) . toBe ( true )
98
+ document . body . click ( )
99
+ expect ( customWrapper . vm . visible ) . toBe ( false )
120
100
} )
121
101
it ( 'opens then toggler is passed by slot' , ( ) => {
102
+ const navWrapper = generateNavWrapper ( )
122
103
const toggle = ( ) => {
123
- jest . useFakeTimers ( )
124
104
navWrapper . find ( '.toggler' ) . trigger ( 'click' )
125
- jest . runAllTimers ( )
126
105
}
127
106
128
107
expect ( navWrapper . vm . visible ) . toBe ( false )
0 commit comments