@@ -147,6 +147,44 @@ describe('Dropdown', () => {
147
147
dropdown . toggle ( )
148
148
} )
149
149
150
+ it ( 'should destroy old popper references on toggle' , done => {
151
+ fixtureEl . innerHTML = [
152
+ '<div class="first dropdown">' ,
153
+ ' <button href="#" class="firstBtn btn" data-toggle="dropdown" aria-expanded="false">Dropdown</button>' ,
154
+ ' <div class="dropdown-menu">' ,
155
+ ' <a class="dropdown-item" href="#">Secondary link</a>' ,
156
+ ' </div>' ,
157
+ '</div>' ,
158
+ '<div class="second dropdown">' ,
159
+ ' <button href="#" class="secondBtn btn" data-toggle="dropdown" aria-expanded="false">Dropdown</button>' ,
160
+ ' <div class="dropdown-menu">' ,
161
+ ' <a class="dropdown-item" href="#">Secondary link</a>' ,
162
+ ' </div>' ,
163
+ '</div>'
164
+ ] . join ( '' )
165
+
166
+ const btnDropdown1 = fixtureEl . querySelector ( '.firstBtn' )
167
+ const btnDropdown2 = fixtureEl . querySelector ( '.secondBtn' )
168
+ const firstDropdownEl = fixtureEl . querySelector ( '.first' )
169
+ const secondDropdownEl = fixtureEl . querySelector ( '.second' )
170
+ const dropdown1 = new Dropdown ( btnDropdown1 )
171
+ const dropdown2 = new Dropdown ( btnDropdown2 )
172
+
173
+ firstDropdownEl . addEventListener ( 'shown.bs.dropdown' , ( ) => {
174
+ expect ( firstDropdownEl . classList . contains ( 'show' ) ) . toEqual ( true )
175
+ spyOn ( dropdown1 . _popper , 'destroy' )
176
+ dropdown2 . toggle ( )
177
+ done ( )
178
+ } )
179
+
180
+ secondDropdownEl . addEventListener ( 'shown.bs.dropdown' , ( ) => {
181
+ expect ( dropdown1 . _popper . destroy ) . toHaveBeenCalled ( )
182
+ done ( )
183
+ } )
184
+
185
+ dropdown1 . toggle ( )
186
+ } )
187
+
150
188
it ( 'should toggle a dropdown and add/remove event listener on mobile' , done => {
151
189
fixtureEl . innerHTML = [
152
190
'<div class="dropdown">' ,
0 commit comments