bootstrap-vue
Version:
With more than 85 components, over 45 available plugins, several directives, and 1000+ icons, BootstrapVue provides one of the most comprehensive implementations of the Bootstrap v4 component and grid system available for Vue.js v2.6, complete with extens
255 lines (212 loc) • 7.9 kB
JavaScript
import { mount } from '@vue/test-utils'
import { BJumbotron } from './jumbotron'
describe('jumbotron', () => {
it('has expected default structure', async () => {
const wrapper = mount(BJumbotron)
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.text()).toEqual('')
wrapper.destroy()
})
it('renders with custom root element when prop "tag" is set', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
tag: 'article'
}
})
expect(wrapper.element.tagName).toBe('ARTICLE')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.text()).toEqual('')
wrapper.destroy()
})
it('has border when prop "border-variant" is set', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
borderVariant: 'danger'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes()).toContain('border')
expect(wrapper.classes()).toContain('border-danger')
expect(wrapper.classes().length).toBe(3)
wrapper.destroy()
})
it('has background variant when prop "bg-variant" is set', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
bgVariant: 'info'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes()).toContain('bg-info')
expect(wrapper.classes().length).toBe(2)
wrapper.destroy()
})
it('has text variant when prop "text-variant" is set', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
textVariant: 'primary'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes()).toContain('text-primary')
expect(wrapper.classes().length).toBe(2)
wrapper.destroy()
})
it('renders default slot content', async () => {
const wrapper = mount(BJumbotron, {
slots: {
default: 'foobar'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.text()).toEqual('foobar')
expect(wrapper.findAll('.jumbotron > *').length).toBe(0)
wrapper.destroy()
})
it('renders default slot content inside container when "fluid" prop set', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
fluid: true
},
slots: {
default: 'foobar'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes()).toContain('jumbotron-fluid')
expect(wrapper.classes().length).toBe(2)
expect(wrapper.findAll('.jumbotron > *').length).toBe(1)
expect(wrapper.findAll('.container').length).toBe(1)
expect(wrapper.find('.container').element.tagName).toBe('DIV')
expect(wrapper.find('.container').text()).toEqual('foobar')
expect(wrapper.text()).toEqual('foobar')
wrapper.destroy()
})
it('renders default slot content inside ".container-fluid" when props "fluid" and "container-fluid" set', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
fluid: true,
containerFluid: true
},
slots: {
default: 'foobar'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes()).toContain('jumbotron-fluid')
expect(wrapper.classes().length).toBe(2)
expect(wrapper.findAll('.jumbotron > *').length).toBe(1)
expect(wrapper.findAll('.container').length).toBe(0)
expect(wrapper.findAll('.container-fluid').length).toBe(1)
expect(wrapper.find('.container-fluid').element.tagName).toBe('DIV')
expect(wrapper.find('.container-fluid').text()).toEqual('foobar')
expect(wrapper.text()).toEqual('foobar')
wrapper.destroy()
})
it('renders header and lead content by props', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
header: 'foo',
lead: 'bar'
},
slots: {
default: '<span>baz</span>'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.findAll('h1').length).toBe(1)
expect(wrapper.findAll('p').length).toBe(1)
expect(wrapper.findAll('span').length).toBe(1)
expect(wrapper.find('.jumbotron > h1 + p + span').exists()).toBe(true)
const $header = wrapper.find('h1')
expect($header.classes()).toContain('display-3')
expect($header.classes().length).toBe(1)
expect($header.text()).toEqual('foo')
const $lead = wrapper.find('p')
expect($lead.classes()).toContain('lead')
expect($lead.classes().length).toBe(1)
expect($lead.text()).toEqual('bar')
expect(wrapper.find('span').text()).toEqual('baz')
wrapper.destroy()
})
it('renders header and lead content by html props', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
// We also pass non-html props to ensure html props have precedence
header: 'foo',
headerHtml: '<strong>baz</strong>',
lead: 'bar',
leadHtml: '<strong>bat</strong>'
},
slots: {
default: '<span>baz</span>'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.findAll('h1').length).toBe(1)
expect(wrapper.findAll('p').length).toBe(1)
expect(wrapper.findAll('span').length).toBe(1)
expect(wrapper.find('.jumbotron > h1 + p + span').exists()).toBe(true)
const $header = wrapper.find('h1')
expect($header.classes()).toContain('display-3')
expect($header.classes().length).toBe(1)
expect($header.find('strong').exists()).toBe(true)
expect($header.text()).toEqual('baz')
const $lead = wrapper.find('p')
expect($lead.classes()).toContain('lead')
expect($lead.classes().length).toBe(1)
expect($lead.find('strong').exists()).toBe(true)
expect($lead.text()).toEqual('bat')
expect(wrapper.find('span').text()).toEqual('baz')
wrapper.destroy()
})
it('renders header and lead content by slots', async () => {
const wrapper = mount(BJumbotron, {
propsData: {
// We also pass as props to ensure slots have precedence
header: 'foo',
headerHtml: '<strong>baz</strong>',
lead: 'bar',
leadHtml: '<strong>bat</strong>'
},
slots: {
default: '<span>baz</span>',
header: '<small>foo</small>',
lead: '<small>bar</small>'
}
})
expect(wrapper.element.tagName).toBe('DIV')
expect(wrapper.classes()).toContain('jumbotron')
expect(wrapper.classes().length).toBe(1)
expect(wrapper.findAll('h1').length).toBe(1)
expect(wrapper.findAll('p').length).toBe(1)
expect(wrapper.findAll('span').length).toBe(1)
expect(wrapper.find('.jumbotron > h1 + p + span').exists()).toBe(true)
const $header = wrapper.find('h1')
expect($header.classes()).toContain('display-3')
expect($header.classes().length).toBe(1)
expect($header.find('small').exists()).toBe(true)
expect($header.text()).toEqual('foo')
const $lead = wrapper.find('p')
expect($lead.classes()).toContain('lead')
expect($lead.classes().length).toBe(1)
expect($lead.find('small').exists()).toBe(true)
expect($lead.text()).toEqual('bar')
expect(wrapper.find('span').text()).toEqual('baz')
wrapper.destroy()
})
})