11import { mount } from '@vue/test-utils'
2- import { waitNT } from '../../../tests/utils'
2+ import { waitNT , waitRAF } from '../../../tests/utils'
33import { BNavItemDropdown } from './nav-item-dropdown'
44
55describe ( 'nav-item-dropdown' , ( ) => {
@@ -25,7 +25,7 @@ describe('nav-item-dropdown', () => {
2525 expect ( $toggle . attributes ( 'role' ) ) . toEqual ( 'button' )
2626 expect ( $toggle . attributes ( 'aria-haspopup' ) ) . toEqual ( 'true' )
2727 expect ( $toggle . attributes ( 'aria-expanded' ) ) . toEqual ( 'false' )
28- expect ( $toggle . attributes ( 'href' ) ) . toEqual ( `# ${ $toggle . attributes ( 'id' ) } ` )
28+ expect ( $toggle . attributes ( 'href' ) ) . toEqual ( '#' )
2929 expect ( $toggle . classes ( ) ) . toContain ( 'dropdown-toggle' )
3030 expect ( $toggle . classes ( ) ) . toContain ( 'nav-link' )
3131
@@ -38,7 +38,7 @@ describe('nav-item-dropdown', () => {
3838 wrapper . destroy ( )
3939 } )
4040
41- it ( 'should flag that we are in a nav' , async ( ) => {
41+ it ( 'should have a flag that we are in a nav' , async ( ) => {
4242 const wrapper = mount ( BNavItemDropdown , {
4343 propsData : {
4444 text : 'toggle'
@@ -51,7 +51,7 @@ describe('nav-item-dropdown', () => {
5151 wrapper . destroy ( )
5252 } )
5353
54- it ( 'should have custom toggle class in nav-item-dropdown ' , async ( ) => {
54+ it ( 'should have custom toggle class when "toggle-class" prop set ' , async ( ) => {
5555 const wrapper = mount ( BNavItemDropdown , {
5656 propsData : {
5757 text : 'toggle' ,
@@ -60,20 +60,15 @@ describe('nav-item-dropdown', () => {
6060 } )
6161
6262 expect ( wrapper . vm ) . toBeDefined ( )
63-
6463 await waitNT ( wrapper . vm )
6564
6665 const $toggle = wrapper . find ( '.dropdown-toggle' )
67- expect ( $toggle . element . tagName ) . toBe ( 'A' )
68- expect ( $toggle . attributes ( 'href' ) ) . toEqual ( `#${ $toggle . attributes ( 'id' ) } ` )
69- expect ( $toggle . classes ( ) ) . toContain ( 'nav-link' )
70- expect ( $toggle . classes ( ) ) . toContain ( 'dropdown-toggle' )
7166 expect ( $toggle . classes ( ) ) . toContain ( 'nav-link-custom' )
7267
7368 wrapper . destroy ( )
7469 } )
7570
76- it ( 'should be disabled when disabled prop set' , async ( ) => {
71+ it ( 'should be disabled when " disabled" prop set' , async ( ) => {
7772 const wrapper = mount ( BNavItemDropdown , {
7873 propsData : {
7974 text : 'toggle' ,
@@ -82,38 +77,53 @@ describe('nav-item-dropdown', () => {
8277 } )
8378
8479 expect ( wrapper . vm ) . toBeDefined ( )
85-
8680 await waitNT ( wrapper . vm )
8781
8882 const $toggle = wrapper . find ( '.dropdown-toggle' )
89- expect ( $toggle . element . tagName ) . toBe ( 'A' )
90- expect ( $toggle . attributes ( 'role' ) ) . toEqual ( 'button' )
91- expect ( $toggle . attributes ( 'href' ) ) . toEqual ( `#${ $toggle . attributes ( 'id' ) } ` )
92- expect ( $toggle . classes ( ) ) . toContain ( 'nav-link' )
93- expect ( $toggle . classes ( ) ) . toContain ( 'dropdown-toggle' )
9483 expect ( $toggle . classes ( ) ) . toContain ( 'disabled' )
9584 expect ( $toggle . attributes ( 'aria-disabled' ) ) . toBeDefined ( )
9685
9786 wrapper . destroy ( )
9887 } )
9988
100- it ( 'should prevent click when custom href is set ' , async ( ) => {
89+ it ( 'should open/close on toggle click ' , async ( ) => {
10190 const wrapper = mount ( BNavItemDropdown , {
10291 propsData : {
103- text : 'toggle' ,
104- href : '/foobar'
92+ text : 'toggle'
10593 }
10694 } )
10795
10896 expect ( wrapper . vm ) . toBeDefined ( )
97+ await waitNT ( wrapper . vm )
98+
99+ const $toggle = wrapper . find ( '.dropdown-toggle' )
100+ expect ( wrapper . vm . visible ) . toBe ( false )
101+ expect ( $toggle . attributes ( 'aria-expanded' ) ) . toEqual ( 'false' )
102+
103+ await $toggle . trigger ( 'click' )
104+ await waitRAF ( )
105+ expect ( wrapper . vm . visible ) . toBe ( true )
106+ expect ( $toggle . attributes ( 'aria-expanded' ) ) . toEqual ( 'true' )
109107
108+ await $toggle . trigger ( 'click' )
109+ await waitRAF ( )
110+ expect ( wrapper . vm . visible ) . toBe ( false )
111+ expect ( $toggle . attributes ( 'aria-expanded' ) ) . toEqual ( 'false' )
112+
113+ wrapper . destroy ( )
114+ } )
115+
116+ it ( 'should prevent toggle click' , async ( ) => {
117+ const wrapper = mount ( BNavItemDropdown , {
118+ propsData : {
119+ text : 'toggle'
120+ }
121+ } )
122+
123+ expect ( wrapper . vm ) . toBeDefined ( )
110124 await waitNT ( wrapper . vm )
111125
112126 const $toggle = wrapper . find ( '.dropdown-toggle' )
113- expect ( $toggle . element . tagName ) . toBe ( 'A' )
114- expect ( $toggle . attributes ( 'href' ) ) . toEqual ( '/foobar' )
115- expect ( $toggle . classes ( ) ) . toContain ( 'nav-link' )
116- expect ( $toggle . classes ( ) ) . toContain ( 'dropdown-toggle' )
117127
118128 await $toggle . trigger ( 'click' )
119129 expect ( wrapper . emitted ( 'toggle' ) ) . toBeDefined ( )
0 commit comments