import Collapse from '..'; import CollapseItem from '../../collapse-item'; import { later, mount } from '../../../test'; const component = { template: ` content content content `, props: { accordion: Boolean, border: { type: Boolean, default: true, }, }, data() { return { active: this.accordion ? '' : [], }; }, }; test('basic mode', async () => { const wrapper = mount(component); const titles = wrapper.findAll('.van-collapse-item__title'); titles.at(0).trigger('click'); expect(wrapper.vm.active).toEqual(['first']); await later(); titles.at(1).trigger('click'); expect(wrapper.vm.active).toEqual(['first', 1]); await later(); titles.at(0).trigger('click'); expect(wrapper.vm.active).toEqual([1]); wrapper.destroy(); }); test('accordion', async () => { 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); await later(); titles.at(0).trigger('click'); expect(wrapper.vm.active).toEqual('first'); titles.at(0).trigger('click'); expect(wrapper.vm.active).toEqual(''); }); test('render collapse-item slot', () => { const wrapper = mount({ template: ` `, data() { return { active: [], }; }, }); expect(wrapper).toMatchSnapshot(); }); test('disable border', () => { const wrapper = mount(component, { propsData: { border: false, }, }); expect(wrapper).toMatchSnapshot(); }); test('lazy render collapse content', async () => { const wrapper = mount({ template: ` content {{ content }} `, components: { Collapse, CollapseItem, }, data() { return { content: '', active: [], }; }, }); const titles = wrapper.findAll('.van-collapse-item__title'); titles.at(1).trigger('click'); wrapper.vm.content = 'content'; expect(wrapper).toMatchSnapshot(); }); test('toggle method', (done) => { mount({ template: ` `, data() { return { active: [] }; }, mounted() { this.$refs.a.toggle(); expect(this.active).toEqual(['a']); this.$refs.b.toggle(); expect(this.active).toEqual(['a', 'b']); this.$refs.b.toggle(false); expect(this.active).toEqual(['a']); this.$refs.a.toggle(); expect(this.active).toEqual([]); done(); }, }); }); test('toggle method in accordion mode', (done) => { mount({ template: ` `, data() { return { active: '' }; }, mounted() { this.$refs.a.toggle(); expect(this.active).toEqual('a'); this.$refs.b.toggle(); expect(this.active).toEqual('b'); this.$refs.b.toggle(false); expect(this.active).toEqual(''); this.$refs.a.toggle(); expect(this.active).toEqual('a'); done(); }, }); });