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
134 lines (118 loc) • 3.03 kB
JavaScript
import { mount } from '@vue/test-utils'
import { BTable } from './table'
const testItems = [
{ a: 1, b: 2, c: 3 },
{ a: 4, b: 5, c: 6 },
{ a: 7, b: 8, c: 9 },
{ a: 10, b: 11, c: 12 },
{ a: 13, b: 14, c: 15 }
]
describe('table > pagination', () => {
it('default should not be paginated', async () => {
const wrapper = mount(BTable, {
propsData: {
items: testItems
}
})
expect(wrapper.findAll('tbody > tr').length).toBe(5)
wrapper.destroy()
})
it('should have 3 rows when per-page=3', async () => {
const wrapper = mount(BTable, {
propsData: {
items: testItems,
perPage: 3,
currentPage: 1
}
})
expect(wrapper.findAll('tbody > tr').length).toBe(3)
const $trs = wrapper.findAll('tbody > tr')
expect(
$trs
.at(0)
.find('td')
.text()
).toBe('1')
expect(
$trs
.at(1)
.find('td')
.text()
).toBe('4')
expect(
$trs
.at(2)
.find('td')
.text()
).toBe('7')
wrapper.destroy()
})
it('changing pages should update rows', async () => {
const wrapper = mount(BTable, {
propsData: {
items: testItems,
perPage: 3,
currentPage: 1
}
})
expect(wrapper.findAll('tbody > tr').length).toBe(3)
let $trs = wrapper.findAll('tbody > tr')
expect(
$trs
.at(0)
.find('td')
.text()
).toBe('1')
expect(
$trs
.at(1)
.find('td')
.text()
).toBe('4')
expect(
$trs
.at(2)
.find('td')
.text()
).toBe('7')
await wrapper.setProps({ currentPage: 2 })
expect(wrapper.findAll('tbody > tr').length).toBe(2)
$trs = wrapper.findAll('tbody > tr')
expect(
$trs
.at(0)
.find('td')
.text()
).toBe('10')
expect(
$trs
.at(1)
.find('td')
.text()
).toBe('13')
await wrapper.setProps({ currentPage: 3 })
expect(wrapper.findAll('tbody > tr').length).toBe(0)
wrapper.destroy()
})
it('setting current-page to more than pages shows empty row when show-empty=true', async () => {
const wrapper = mount(BTable, {
propsData: {
items: testItems,
perPage: 3,
currentPage: 1,
showEmpty: true
}
})
expect(wrapper.findAll('tbody > tr').length).toBe(3)
await wrapper.setProps({ currentPage: 10 })
expect(wrapper.findAll('tbody > tr').length).toBe(1)
const $tr = wrapper.find('tbody > tr')
expect($tr.text()).toBe(wrapper.vm.emptyText)
expect($tr.classes()).toContain('b-table-empty-row')
expect($tr.attributes('role')).toBe('row')
expect(wrapper.find('tbody > tr > td').attributes('role')).toBe('cell')
expect(wrapper.find('tbody > tr > td > div').attributes('role')).toBe('alert')
expect(wrapper.find('tbody > tr > td > div').attributes('aria-live')).toBe('polite')
wrapper.destroy()
})
})