Skip to content

Commit daa160c

Browse files
committed
[Breadcrumbs] Fix prop check fail issue.
1 parent 241b974 commit daa160c

File tree

3 files changed

+79
-9
lines changed

3 files changed

+79
-9
lines changed

src/components/breadcrumbs/Breadcrumbs.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ export default {
88
if (children && children.length) {
99
slot = children
1010
} else if (props.items) {
11-
props.items.forEach((item, index) => {
12-
slot.push(h(
11+
slot = props.items.map((item, index) => {
12+
return h(
1313
BreadcrumbItem,
1414
{
15-
key: item.key ? item.key : index,
15+
key: item.hasOwnProperty('key') ? item.key : index,
1616
props: {
17-
active: typeof item.active === 'boolean' ? item.active : index === props.items.length - 1,
17+
active: item.hasOwnProperty('active') ? item.active : index === props.items.length - 1,
1818
href: item.href,
1919
target: item.target,
2020
to: item.to,
@@ -24,7 +24,7 @@ export default {
2424
}
2525
},
2626
item.text
27-
))
27+
)
2828
})
2929
}
3030
return h('ol', mergeData(data, {class: 'breadcrumb'}), slot)

test/unit/specs/Breadcrumbs.spec.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ describe('Breadcrumbs', () => {
6363
let vm = new Vue({
6464
data () {
6565
return {
66-
items: [{text: 'test', href: '#', active: false}]
66+
items: [{text: 'test', href: '#', active: false, key: 0}]
6767
}
6868
},
6969
render: res.render,
@@ -76,7 +76,18 @@ describe('Breadcrumbs', () => {
7676
expect(nav1.getAttribute('target')).to.equal('_self')
7777
expect(nav1.textContent).to.equal('test')
7878
expect($el.find('.active').length).to.equal(0)
79-
$el.remove()
79+
vm.$destroy()
80+
})
81+
82+
it('should render nothing if no children and items', async () => {
83+
let res = Vue.compile('<breadcrumbs></breadcrumbs>')
84+
let vm = new Vue({
85+
render: res.render,
86+
staticRenderFns: res.staticRenderFns
87+
}).$mount()
88+
let $el = $(vm.$el)
89+
await vm.$nextTick()
90+
expect($el.children().length).to.equal(0)
8091
vm.$destroy()
8192
})
8293
})

test/unit/specs/Tabs.spec.js

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,10 +138,13 @@ describe('Tabs', () => {
138138
// Silent to remove out logs in terminal
139139
}
140140
let spy = sinon.spy(window, 'alert')
141-
utils.triggerEvent(nav.querySelectorAll('li')[2].querySelector('a'), 'click')
141+
utils.triggerEvent(nav.querySelectorAll('li > a')[1], 'click')
142142
await vm.$nextTick()
143143
await utils.sleep(350)
144-
sinon.assert.called(spy)
144+
utils.triggerEvent(nav.querySelectorAll('li > a')[2], 'click')
145+
await vm.$nextTick()
146+
await utils.sleep(350)
147+
sinon.assert.calledOnce(spy)
145148
window.alert = _savedAlert
146149
})
147150

@@ -233,4 +236,60 @@ describe('Tabs', () => {
233236
expect(activeContent.length).to.equal(1)
234237
expect(activeContent[0].textContent).to.contain('Tab 0')
235238
})
239+
240+
it('should be able to select dynamic tab', async () => {
241+
let _vm = vm.$refs['tabs-dynamic-example']
242+
let $el = $(_vm.$el)
243+
let nav = $el.find('.nav-tabs').get(0)
244+
let content = $el.find('.tab-content').get(0)
245+
let pushBtn = $el.find('.btn').get(0)
246+
let popBtn = $el.find('.btn').get(1)
247+
await vm.$nextTick()
248+
await vm.$nextTick()
249+
// Add a tab
250+
pushBtn.click()
251+
await vm.$nextTick()
252+
pushBtn.click()
253+
await vm.$nextTick()
254+
pushBtn.click()
255+
await vm.$nextTick()
256+
await utils.sleep(350)
257+
expect(nav.querySelectorAll('li').length).to.equal(4)
258+
_vm.index = 1
259+
await vm.$nextTick()
260+
await utils.sleep(350)
261+
// check active tab
262+
let activeTab = nav.querySelectorAll('.active')
263+
expect(activeTab.length).to.equal(1)
264+
expect(activeTab[0].querySelector('a').textContent).to.equal('Tab 1')
265+
// check active content
266+
let activeContent = content.querySelectorAll('.tab-pane.active')
267+
expect(activeContent.length).to.equal(1)
268+
expect(activeContent[0].textContent).to.contain('Tab 1')
269+
popBtn.click()
270+
await vm.$nextTick()
271+
await utils.sleep(350)
272+
expect(nav.querySelectorAll('li').length).to.equal(3)
273+
// check active tab
274+
activeTab = nav.querySelectorAll('.active')
275+
expect(activeTab.length).to.equal(1)
276+
expect(activeTab[0].querySelector('a').textContent).to.equal('Tab 1')
277+
// check active content
278+
activeContent = content.querySelectorAll('.tab-pane.active')
279+
expect(activeContent.length).to.equal(1)
280+
expect(activeContent[0].textContent).to.contain('Tab 1')
281+
// switch tab
282+
let tab2 = nav.querySelectorAll('li')[2]
283+
utils.triggerEvent(tab2.querySelector('a'), 'click')
284+
await vm.$nextTick()
285+
await utils.sleep(350)
286+
// check active tab
287+
activeTab = nav.querySelectorAll('.active')
288+
expect(activeTab.length).to.equal(1)
289+
expect(activeTab[0].querySelector('a').textContent).to.equal('Tab 2')
290+
// check active content
291+
activeContent = content.querySelectorAll('.tab-pane.active')
292+
expect(activeContent.length).to.equal(1)
293+
expect(activeContent[0].textContent).to.contain('Tab 2')
294+
})
236295
})

0 commit comments

Comments
 (0)