diff --git a/packages/collapse/test/index.spec.js b/packages/collapse/test/index.spec.js
new file mode 100644
index 000000000..dc46f74cd
--- /dev/null
+++ b/packages/collapse/test/index.spec.js
@@ -0,0 +1,62 @@
+import Collapse from '..';
+import CollapseItem from '../../collapse-item';
+import { mount } from '@vue/test-utils';
+
+const component = {
+  template: `
+  <collapse v-model="active" :accordion="accordion">
+    <collapse-item title="a" name="first">content</collapse-item>
+    <collapse-item title="b">content</collapse-item>
+    <collapse-item title="c">content</collapse-item>
+  </collapse>
+  `,
+  components: {
+    Collapse,
+    CollapseItem
+  },
+  props: {
+    accordion: Boolean
+  },
+  data() {
+    return {
+      active: this.accordion ? '' : []
+    };
+  }
+};
+
+test('basic mode', () => {
+  const wrapper = mount(component);
+
+  const titles = wrapper.findAll('.van-collapse-item__title');
+  titles.at(0).trigger('click');
+  expect(wrapper.vm.active).toEqual(['first']);
+
+  titles.at(1).trigger('click');
+  expect(wrapper.vm.active).toEqual(['first', 1]);
+
+  titles.at(0).trigger('click');
+  expect(wrapper.vm.active).toEqual([1]);
+
+  wrapper.destroy();
+});
+
+it('accordion', () => {
+  const wrapper = mount(component, {
+    propsData: {
+      accordion: true
+    }
+  });
+
+  const titles = wrapper.findAll('.van-collapse-item__title');
+  titles.at(0).trigger('click');
+  expect(wrapper.vm.active).toEqual('first');
+
+  titles.at(1).trigger('click');
+  expect(wrapper.vm.active).toEqual(1);
+
+  titles.at(0).trigger('click');
+  expect(wrapper.vm.active).toEqual('first');
+
+  titles.at(0).trigger('click');
+  expect(wrapper.vm.active).toEqual('');
+});