@@ -6,24 +6,15 @@ const localVue = new createLocalVue()
66localVue . use ( VueRouter )
77const router = new VueRouter ( )
88
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'
209const wrapper = mount ( Component , {
2110 router,
2211 localVue
2312} )
2413
25- const customWrapper = mount ( Component , {
14+ const ComponentName = 'CDropdown'
2615
16+ const generateWrapper = ( ) => mount ( Component , {
17+ attachToDocument : true ,
2718 propsData : {
2819 togglerText : 'Dropdown button' ,
2920 show : true ,
@@ -43,7 +34,7 @@ const customWrapper = mount(Component, {
4334 }
4435} )
4536
46- const navWrapper = mount ( Component , {
37+ const generateNavWrapper = ( ) => mount ( Component , {
4738 propsData : {
4839 addMenuClasses : 'additional-menu-class' ,
4940 addTogglerClasses : 'additional-toggler-class' ,
@@ -68,31 +59,10 @@ describe(ComponentName, () => {
6859 expect ( wrapper . element ) . toMatchSnapshot ( )
6960 } )
7061 it ( 'renders custom wrapper correctly' , ( ) => {
71- expect ( customWrapper . element ) . toMatchSnapshot ( )
62+ expect ( generateWrapper ( ) . element ) . toMatchSnapshot ( )
7263 } )
7364 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 ( )
9666 } )
9767 it ( 'toggles when show prop is changed' , ( ) => {
9868 expect ( wrapper . vm . visible ) . toBe ( false )
@@ -104,25 +74,34 @@ describe(ComponentName, () => {
10474 wrapper . vm . $router . push ( 'new-route-name' )
10575 expect ( wrapper . vm . visible ) . toBe ( false )
10676 } )
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 ( )
10879 const toggle = ( ) => {
109- jest . useFakeTimers ( )
11080 customWrapper . find ( '.dropdown-toggle-split' ) . trigger ( 'click' )
111- jest . runAllTimers ( )
11281 }
113-
82+
11483 expect ( customWrapper . vm . visible ) . toBe ( true )
115- customWrapper . setProps ( { disabled : true } )
84+ customWrapper . setProps ( {
85+ disabled : true
86+ } )
11687 toggle ( )
11788 expect ( customWrapper . vm . visible ) . toBe ( false )
11889 toggle ( )
11990 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 )
120100 } )
121101 it ( 'opens then toggler is passed by slot' , ( ) => {
102+ const navWrapper = generateNavWrapper ( )
122103 const toggle = ( ) => {
123- jest . useFakeTimers ( )
124104 navWrapper . find ( '.toggler' ) . trigger ( 'click' )
125- jest . runAllTimers ( )
126105 }
127106
128107 expect ( navWrapper . vm . visible ) . toBe ( false )
0 commit comments