diff --git a/src/collapse-item/index.js b/src/collapse-item/index.js index 1a9b44276..e8282affb 100644 --- a/src/collapse-item/index.js +++ b/src/collapse-item/index.js @@ -38,8 +38,14 @@ export default createComponent({ return null; } - const { value } = this.parent; - return this.parent.accordion + const { value, accordion } = this.parent; + + if (process.env.NODE_ENV !== 'production' && !accordion && !Array.isArray(value)) { + console.error('[Vant] Collapse: type of prop "value" should be Array'); + return; + } + + return accordion ? value === this.currentName : value.some(name => name === this.currentName); } diff --git a/src/collapse/test/index.spec.js b/src/collapse/test/index.spec.js index d1cf8524b..72bead829 100644 --- a/src/collapse/test/index.spec.js +++ b/src/collapse/test/index.spec.js @@ -1,19 +1,19 @@ +import Vue from 'vue'; import Collapse from '..'; import CollapseItem from '../../collapse-item'; import { later, mount } from '../../../test/utils'; +Vue.use(Collapse); +Vue.use(CollapseItem); + const component = { template: ` - - content - content - content - + + content + content + content + `, - components: { - Collapse, - CollapseItem - }, props: { accordion: Boolean, border: { @@ -71,19 +71,15 @@ test('accordion', async () => { test('render collapse-item slot', () => { const wrapper = mount({ template: ` - - + + - - + + `, - components: { - Collapse, - CollapseItem - }, data() { return { active: [] @@ -130,3 +126,25 @@ test('lazy render collapse content', async () => { wrapper.vm.content = 'content'; expect(wrapper).toMatchSnapshot(); }); + +test('warn when value type is incorrect', () => { + const originConsoleError = console.error; + const error = jest.fn(); + console.error = error; + + mount({ + template: ` + + + + `, + data() { + return { + active: 0 + }; + } + }); + + expect(error).toHaveBeenCalledTimes(1); + console.error = originConsoleError; +});