diff --git a/js/src/popover.js b/js/src/popover.js index 375eb8b0ab..b62b6a2123 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -34,7 +34,7 @@ const Default = { const DefaultType = { ...Tooltip.DefaultType, - content: '(string|element|function)' + content: '(null|string|element|function)' } const Event = { diff --git a/js/tests/unit/popover.spec.js b/js/tests/unit/popover.spec.js index a2906ade71..a04bd21c60 100644 --- a/js/tests/unit/popover.spec.js +++ b/js/tests/unit/popover.spec.js @@ -1,4 +1,5 @@ import Popover from '../../src/popover' +import EventHandler from '../../src/dom/event-handler' import { clearFixture, getFixture, jQueryMock } from '../helpers/fixture' describe('Popover', () => { @@ -96,25 +97,6 @@ describe('Popover', () => { popover.show() }) - it('should show a popover with just content', done => { - fixtureEl.innerHTML = 'BS twitter' - - const popoverEl = fixtureEl.querySelector('a') - const popover = new Popover(popoverEl, { - content: 'Popover content' - }) - - popoverEl.addEventListener('shown.bs.popover', () => { - const popoverDisplayed = document.querySelector('.popover') - - expect(popoverDisplayed).not.toBeNull() - expect(popoverDisplayed.querySelector('.popover-body').textContent).toEqual('Popover content') - done() - }) - - popover.show() - }) - it('should show a popover with just content without having header', done => { fixtureEl.innerHTML = 'Nice link' @@ -140,7 +122,7 @@ describe('Popover', () => { const popoverEl = fixtureEl.querySelector('a') const popover = new Popover(popoverEl, { - title: 'Title, which does not require content' + title: 'Title which does not require content' }) popoverEl.addEventListener('shown.bs.popover', () => { @@ -148,7 +130,41 @@ describe('Popover', () => { expect(popoverDisplayed).not.toBeNull() expect(popoverDisplayed.querySelector('.popover-body')).toBeNull() - expect(popoverDisplayed.querySelector('.popover-header').textContent).toEqual('Title, which does not require content') + expect(popoverDisplayed.querySelector('.popover-header').textContent).toEqual('Title which does not require content') + done() + }) + + popover.show() + }) + + it('should show a popover with just title without having body using data-attribute to get config', done => { + fixtureEl.innerHTML = 'Nice link' + + const popoverEl = fixtureEl.querySelector('a') + const popover = new Popover(popoverEl) + + popoverEl.addEventListener('shown.bs.popover', () => { + const popoverDisplayed = document.querySelector('.popover') + + expect(popoverDisplayed).not.toBeNull() + expect(popoverDisplayed.querySelector('.popover-body')).toBeNull() + expect(popoverDisplayed.querySelector('.popover-header').textContent).toEqual('Title which does not require content') + done() + }) + + popover.show() + }) + + it('should NOT show a popover without `title` and `content`', done => { + fixtureEl.innerHTML = 'Nice link' + + const popoverEl = fixtureEl.querySelector('a') + const popover = new Popover(popoverEl, { animation: false }) + spyOn(EventHandler, 'trigger').and.callThrough() + + setTimeout(() => { + expect(EventHandler.trigger).not.toHaveBeenCalled() + expect(document.querySelector('.popover')).toBeNull() done() })