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: `
-
-
+
+
this is title
this is value
this is icon
this is right icon
-
-
+
+
`,
- 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;
+});