vue-data-tables
Version:
A simple, customizable and pageable table, based on vue2 and element-ui.
163 lines (153 loc) • 5.13 kB
JavaScript
import { data, titles, http } from '../tools/source'
import { destroyVM, createVue, getTableItems, nextTick, simulateEvent, sleep } from '../tools/utils'
let getPaginationItems = function(vm) {
let paginationBar = vm.$el.find('.pagination-bar')
return {
buttons: paginationBar.findAll('button'),
pageNumber: paginationBar.findAll('.number'),
inputElm: paginationBar.findAll('input'),
dropDowns: paginationBar.findAll('.el-select-dropdown__item'),
}
}
describe('client pagination render', _ => {
let vm
afterEach(function() {
vm && destroyVM(vm)
})
it('client base pagination', async () => {
vm = createVue({
template: `
<data-tables :data="data" :current-page="2" :page-size="1" :pagination-props="{ background: true, pageSizes: [1, 2, 3] }">
<el-table-column v-for="title in titles" :prop="title.prop" :label="title.label" :key="title.prop">
</el-table-column>
</data-tables>
`,
data() {
return {
data: data(),
titles
}
}
}, true)
await nextTick(vm)
let { buttons, pageNumber, inputElm, dropDowns } = getPaginationItems(vm)
buttons.at(0).click()
await nextTick(vm)
let { rows } = getTableItems(vm)
rows.should.have.length(1)
let firstRow = rows.at(0)
let firstRowTds = firstRow.findAll('td')
firstRowTds.at(0).should.have.text('FW201601010001')
pageNumber.at(1).click()
await nextTick(vm)
let currentRows = getTableItems(vm).rows
currentRows.should.have.length(1)
let currentFirstRow = rows.at(0)
let currentFirstRowTds = currentFirstRow.findAll('td')
currentFirstRowTds.at(0).should.have.text('FW201601010002')
simulateEvent(inputElm.at(0), 3, 'change')
await nextTick(vm)
currentRows = getTableItems(vm).rows
currentRows.should.have.length(1)
currentFirstRow = rows.at(0)
currentFirstRowTds = currentFirstRow.findAll('td')
currentFirstRowTds.at(0).should.have.text('FW201601010003')
dropDowns.at(2).click()
await nextTick(vm)
currentRows = getTableItems(vm).rows
currentRows.should.have.length(3)
})
it('mismatch pagination', async () => {
vm = createVue({
template: `
<data-tables :data="data" :current-page="1" :page-size="2" :pagination-props="{ background: true, pageSizes: [1, 5, 10] }">
<el-table-column v-for="title in titles" :prop="title.prop" :label="title.label" :key="title.prop">
</el-table-column>
</data-tables>
`,
data() {
return {
data: data(),
titles
}
}
}, true)
let { rows } = getTableItems(vm)
rows.should.have.length(1)
})
it('no pagination', async () => {
vm = createVue({
template: `
<data-tables :data="data" layout="table">
<el-table-column v-for="title in titles" :prop="title.prop" :label="title.label" :key="title.prop">
</el-table-column>
</data-tables>
`,
data() {
return {
data: data(),
titles
}
}
}, true)
await nextTick(vm)
vm.$el.should.not.contain('.pagination-bar')
})
})
describe('server pagination render', _ => {
let vm
afterEach(function() {
vm && destroyVM(vm)
})
it('server base pagination', async () => {
vm = createVue({
template: `
<data-tables-server :data="data" :total="total" @query-change="loadData" :pagination-props="{ pageSizes: [5, 10, 20] }">
<el-table-column v-for="title in titles" :prop="title.prop" :label="title.label" :key="title.label" sortable="custom">
</el-table-column>
</data-tables-server>
`,
data() {
return {
data: [],
titles,
total: 0,
innerPageSize: 5
}
},
methods: {
async loadData(queryInfo) {
let { data, total } = await http(queryInfo)
this.data = data
this.total = total
}
}
}, true)
await sleep(1000)
let { rows } = getTableItems(vm)
rows.should.have.length(20)
let { buttons, pageNumber, inputElm, dropDowns } = getPaginationItems(vm)
buttons.at(1).click()
await sleep(1000)
let currentRows = getTableItems(vm).rows
let currentFirstRow = rows.at(0)
let currentFirstRowTds = currentFirstRow.findAll('td')
currentFirstRowTds.at(0).should.have.text('FW2016010100020')
simulateEvent(inputElm.at(0), 3, 'change')
await sleep(1000)
currentRows = getTableItems(vm).rows
currentFirstRow = rows.at(0)
currentFirstRowTds = currentFirstRow.findAll('td')
currentFirstRowTds.at(0).should.have.text('FW2016010100040')
pageNumber.at(1).click()
await sleep(1000)
currentRows = getTableItems(vm).rows
currentFirstRow = rows.at(0)
currentFirstRowTds = currentFirstRow.findAll('td')
currentFirstRowTds.at(0).should.have.text('FW2016010100020')
dropDowns.at(0).click()
await sleep(1000)
currentRows = getTableItems(vm).rows
currentRows.should.have.length(5)
})
})