diff --git a/js/tests/unit/tab.spec.js b/js/tests/unit/tab.spec.js
index 4741b495de83..242bdba2293a 100644
--- a/js/tests/unit/tab.spec.js
+++ b/js/tests/unit/tab.spec.js
@@ -198,6 +198,35 @@ describe('Tab', () => {
}, 30)
})
+ it('should not create instance when tab is disabled', done => {
+ fixtureEl.innerHTML = [
+ '
',
+ ''
+ ].join('')
+
+ const triggerDisabled = fixtureEl.querySelector('a.disabled')
+ const verify = fixtureEl.querySelector('a:not(.disabled)')
+
+ triggerDisabled.dispatchEvent(new MouseEvent('click', {
+ bubbles: true
+ }))
+ verify.dispatchEvent(new MouseEvent('click', {
+ bubbles: true
+ }))
+
+ setTimeout(() => {
+ expect(Tab.getInstance(triggerDisabled)).toBe(null)
+ expect(Tab.getInstance(verify) instanceof Tab).toBeTrue()
+ done()
+ }, 30)
+ })
+
it('show and shown events should reference correct relatedTarget', done => {
fixtureEl.innerHTML = [
'',
@@ -340,6 +369,40 @@ describe('Tab', () => {
btnCloseEl.click()
})
+
+ it('should call preventDefault if target element is A or AREA', done => {
+ fixtureEl.innerHTML = [
+ '',
+ ' - Tab1
',
+ ' ',
+ ' ',
+ '
',
+ '',
+ '
',
+ '
',
+ '
',
+ '
'
+ ].join('')
+
+ const elementsPrevented = new Set(['A', 'AREA'])
+
+ Array.from(fixtureEl.querySelectorAll('[data-bs-toggle]')).forEach((element, idx, elements) => {
+ const event = new MouseEvent('click', {
+ bubbles: true,
+ cancelable: true
+ })
+
+ element.dispatchEvent(event)
+
+ setTimeout(() => {
+ expect(event.defaultPrevented).toBe(elementsPrevented.has(element.tagName))
+
+ if (idx === elements.length - 1) {
+ done()
+ }
+ }, 10)
+ })
+ })
})
describe('dispose', () => {