From 67fc817cfdc992d2b11ca6547d00e705dcad7cbf Mon Sep 17 00:00:00 2001 From: neverland Date: Sun, 18 Aug 2019 08:47:29 +0800 Subject: [PATCH] [improvement] TreeSelect: add test cases of multiple select (#4139) --- src/tree-select/test/index.spec.js | 144 ++++++++++++++++++++++------- 1 file changed, 113 insertions(+), 31 deletions(-) diff --git a/src/tree-select/test/index.spec.js b/src/tree-select/test/index.spec.js index d379300f5..7de535623 100644 --- a/src/tree-select/test/index.spec.js +++ b/src/tree-select/test/index.spec.js @@ -1,26 +1,37 @@ +import Vue from 'vue'; import TreeSelect from '..'; import { mount } from '../../../test/utils'; +Vue.use(TreeSelect); + test('empty list', () => { expect(mount(TreeSelect)).toMatchSnapshot(); }); +const mockItem = { + text: 'city1', + id: 1 +}; + +const mockItem2 = { + text: 'city2', + id: 2 +}; + +const mockItems = [ + { + text: 'group1', + children: [mockItem] + } +]; + test('click-nav event', () => { const onNavClick = jest.fn(); const onClickNav = jest.fn(); - const item = { - text: 'city1', - id: 1 - }; const wrapper = mount(TreeSelect, { propsData: { - items: [ - { - text: 'group1', - children: [item] - } - ] + items: mockItems }, context: { on: { @@ -30,8 +41,9 @@ test('click-nav event', () => { } }); - const items = wrapper.findAll('.van-tree-select__nav-item'); - items.at(0).trigger('click'); + const navItems = wrapper.findAll('.van-tree-select__nav-item'); + navItems.at(0).trigger('click'); + expect(onNavClick).toHaveBeenCalledWith(0); expect(onClickNav).toHaveBeenCalledWith(0); }); @@ -39,19 +51,10 @@ test('click-nav event', () => { test('click-item event', () => { const onItemClick = jest.fn(); const onClickItem = jest.fn(); - const item = { - text: 'city1', - id: 1 - }; const wrapper = mount(TreeSelect, { propsData: { - items: [ - { - text: 'group1', - children: [item] - } - ] + items: mockItems }, context: { on: { @@ -63,23 +66,19 @@ test('click-item event', () => { const items = wrapper.findAll('.van-tree-select__item'); items.at(0).trigger('click'); - expect(onItemClick).toHaveBeenCalledWith(item); - expect(onClickItem).toHaveBeenCalledWith(item); + expect(onItemClick).toHaveBeenCalledWith(mockItem); + expect(onClickItem).toHaveBeenCalledWith(mockItem); }); test('click disabled nav', () => { const onClickNav = jest.fn(); - const item = { - text: 'city1', - id: 1 - }; const wrapper = mount(TreeSelect, { propsData: { items: [ { text: 'group1', - children: [item], + children: [mockItem], disabled: true } ] @@ -105,8 +104,7 @@ test('click disabled item', () => { text: 'group1', children: [ { - text: 'city1', - id: 1, + ...mockItem, disabled: true } ] @@ -151,3 +149,87 @@ test('height prop', () => { expect(wrapper).toMatchSnapshot(); }); + +test('use sync modifier in main-active-index', () => { + const wrapper = mount({ + template: ` + + `, + data() { + return { + mainActiveIndex: -1, + items: mockItems + }; + } + }); + + const navItems = wrapper.findAll('.van-tree-select__nav-item'); + navItems.at(0).trigger('click'); + + expect(wrapper.vm.mainActiveIndex).toEqual(0); +}); + +test('use sync modifier in active-id', () => { + const wrapper = mount({ + template: ` + + `, + data() { + return { + activeId: mockItem.id, + mainActiveIndex: 0, + items: [ + { + text: 'group1', + children: [mockItem, mockItem2] + } + ] + }; + } + }); + + const items = wrapper.findAll('.van-tree-select__item'); + items.at(1).trigger('click'); + + expect(wrapper.vm.activeId).toEqual(mockItem2.id); +}); + +test('multiple select', () => { + const wrapper = mount({ + template: ` + + `, + data() { + return { + activeId: [], + mainActiveIndex: 0, + items: [ + { + text: 'group1', + children: [mockItem, mockItem2] + } + ] + }; + } + }); + + const items = wrapper.findAll('.van-tree-select__item'); + items.at(0).trigger('click'); + items.at(1).trigger('click'); + expect(wrapper.vm.activeId).toEqual([mockItem.id, mockItem2.id]); + + items.at(0).trigger('click'); + items.at(1).trigger('click'); + expect(wrapper.vm.activeId).toEqual([]); +});