import { useState } from 'react'; import { TabPane, Tabs } from '../../index'; import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants'; let defaultTabPane = [ { itemKey: 'itemKeyA', tab: 'titleA', children: 'contentA' }, { itemKey: 'itemKeyB', tab: 'titleB', children: 'contentB' } ] let ACTIVE = `.${BASE_CLASS_PREFIX}-tabs-tab-active`; function getTabs(tabProps, tabPaneProps = defaultTabPane) { let tabPane = tabPaneProps.map(pane => { return }); return {tabPane} } describe('Tabs', () => { it('tabs render basicly', () => { let props = {}; const tabs = mount(getTabs(props, defaultTabPane)) // render in same time expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-content`).children().length).toEqual(2); // default active first pane expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleA'); }); it('Tabs with custom className & style & contentStyle', () => { let props = { className: 'test', style: { color: 'red' } }; const tabs = shallow(getTabs(props)); expect(tabs.exists('.test')).toEqual(true); expect(tabs.find('div.test')).toHaveStyle('color', 'red'); }); it('Tabs with defaultActiveKey', () => { let tabProps = { defaultActiveKey: 'itemKeyB' }; const tabs = mount(getTabs(tabProps)); const activeTabContent = tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text(); expect(activeTabContent).toEqual('titleB'); }); it('different type Tabs', () => { let lineTabs = mount(getTabs({ type: 'line' })); let cardTabs = mount(getTabs({ type: 'card' })); let buttonTabs = mount(getTabs({ type: 'button' })); expect(lineTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-button`)).toEqual(false); expect(lineTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-card`)).toEqual(false); expect(cardTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-card`)).toEqual(true); expect(buttonTabs.exists(`.${BASE_CLASS_PREFIX}-tabs-bar-button`)).toEqual(true); }); it('tabList', () => { let tabList = [ { tab: "文档", itemKey: "1" }, { tab: "快速起步", itemKey: "2" }, { tab: "帮助", itemKey: "3" } ]; const contentList = [ (
文档
), (
快速起步
), (
帮助
) ] class TabListDemo extends React.Component { state = { key: '1' }; render() { return ( {contentList[this.state.key - 1]} ) } } const tabs = mount(); expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-content`).children().length).toEqual(1); }) it('should not toggle whenn clicked disabled pane', () => { let spyOnChange = sinon.spy((activeKey) => { }) let tabProps = { defaultActiveKey: 'itemKeyA', onChange: spyOnChange }; let tabPaneProps = [ { itemKey: 'itemKeyA', tab: 'titleA' }, { itemKey: 'itemKeyB', tab: 'titleB', disabled: true }, ]; let tabs = mount(getTabs(tabProps, tabPaneProps)); expect(tabs.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-disabled`)).toEqual(true); expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-disabled`).text()).toEqual('titleB'); tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1).simulate('click'); expect(spyOnChange.calledOnce).toBe(false); expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleA'); }); it('onTabClick', () => { let onTabClick = (key, e) => { // debugger }; let spyOnTabClick = sinon.spy(onTabClick); let props = { onTabClick: spyOnTabClick }; const tabs = mount(getTabs(props)); tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1).simulate('click'); expect(spyOnTabClick.calledWithMatch("itemKeyB")).toBe(true); expect(spyOnTabClick.calledOnce).toBe(true); }); it('onChange', () => { let onChange = value => { // debugger }; let spyOnChange = sinon.spy(onChange); let tabsProps = { onChange: spyOnChange }; let paneProps = defaultTabPane; const tabs = mount(getTabs(tabsProps, paneProps)); tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1).simulate('click'); expect(spyOnChange.calledWithMatch("itemKeyB")).toBe(true); expect(spyOnChange.calledOnce).toBe(true); }); it('should update when activeKey change', () => { let tabsProps = { activeKey: 'itemKeyA' }; const tabs = mount(getTabs(tabsProps, defaultTabPane)); expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleA'); tabs.setProps({ activeKey: 'itemKeyB' }); tabs.update() expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-tab-active`).text()).toEqual('titleB'); }); it('contentStyle', () => { let tabsProps = { contentStyle: { color: 'red' } }; const tabs = mount(getTabs(tabsProps, defaultTabPane)); expect(tabs.find(`.${BASE_CLASS_PREFIX}-tabs-content`)).toHaveStyle('color', 'red'); }); it('tarBarExtraContent', () => { let extraContent = (
Extra
); let tabsProps = { tabBarExtraContent: extraContent }; const tabs = mount(getTabs(tabsProps, defaultTabPane)); expect(tabs.contains(extraContent)).toEqual(true); }); it('tabpane closable', () => { const Demo = () => { const [tabList, $tabList] = useState([ {tab: '文档', itemKey:'1', text:'文档', closable:true}, {tab: '快速起步', itemKey:'2', text:'快速起步', closable:true}, {tab: '帮助', itemKey:'3', text:'帮助'}, ]); const close = (key)=>{ const newTabList = [...tabList]; const closeIndex = newTabList.findIndex(t=>t.itemKey===key); newTabList.splice(closeIndex, 1); $tabList(newTabList); } return { tabList.map(t=>{t.text}) } } const demo = mount(); const firstTab = demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(0); const secondTab = demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(1); const thirdTab = demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(2); expect(firstTab.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`)).toEqual(true); expect(secondTab.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`)).toEqual(true); expect(thirdTab.exists(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`)).toEqual(false); demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab-icon-close`).at(0).simulate('click'); expect(demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).length).toEqual(2) expect(demo.find(`.${BASE_CLASS_PREFIX}-tabs-tab`).at(0).hasClass(`${BASE_CLASS_PREFIX}-tabs-tab-active`)).toEqual(true); }); })