@@ -611,6 +611,20 @@ describe('Tabs.Basic', () => {
611
611
rerender ( getTabs ( { indicator : { size : origin => origin - 2 } } ) ) ;
612
612
await waitFakeTimer ( ) ;
613
613
expect ( container . querySelector ( '.rc-tabs-ink-bar' ) ) . toHaveStyle ( { width : '18px' } ) ;
614
+
615
+ // 测试小数值的处理
616
+ rerender ( getTabs ( { indicator : { size : origin => origin - 0.5 } } ) ) ;
617
+ await waitFakeTimer ( ) ;
618
+ expect ( container . querySelector ( '.rc-tabs-ink-bar' ) ) . toHaveStyle ( { width : '19.5px' } ) ;
619
+
620
+ // 测试防抖动功能
621
+ rerender ( getTabs ( { indicator : { size : origin => origin - 0.1 } } ) ) ;
622
+ await waitFakeTimer ( ) ;
623
+ const initialWidth = ( container . querySelector ( '.rc-tabs-ink-bar' ) as HTMLElement ) . style . width ;
624
+
625
+ rerender ( getTabs ( { indicator : { size : origin => origin - 0.2 } } ) ) ;
626
+ await waitFakeTimer ( ) ;
627
+ expect ( container . querySelector ( '.rc-tabs-ink-bar' ) ) . toHaveStyle ( { width : initialWidth } ) ;
614
628
} ) ;
615
629
616
630
it ( 'Add span to text label when have icon' , ( ) => {
@@ -624,7 +638,7 @@ describe('Tabs.Basic', () => {
624
638
} ) ;
625
639
626
640
it ( 'support indicatorAlign' , async ( ) => {
627
- const { container : startContainer } = render (
641
+ const { container : startContainer , rerender : rerenderStart } = render (
628
642
< Tabs
629
643
items = { [ { key : 'test' , label : 'test' , icon : 'test' } ] }
630
644
indicator = { { size : origin => origin - 20 , align : 'start' } }
@@ -653,10 +667,21 @@ describe('Tabs.Basic', () => {
653
667
654
668
expect ( parseInt ( startBar . style . left ) ) . toBeLessThanOrEqual ( parseInt ( centerBar . style . left ) ) ;
655
669
expect ( parseInt ( centerBar . style . left ) ) . toBeLessThanOrEqual ( parseInt ( endBar . style . left ) ) ;
670
+
671
+ // 测试动态切换 align
672
+ rerenderStart (
673
+ < Tabs
674
+ items = { [ { key : 'test' , label : 'test' , icon : 'test' } ] }
675
+ indicator = { { size : origin => origin - 20 , align : 'center' } }
676
+ /> ,
677
+ ) ;
678
+ await waitFakeTimer ( ) ;
679
+ const newStartBar = startContainer . querySelector < HTMLDivElement > ( selectors ) ;
680
+ expect ( parseInt ( newStartBar . style . left ) ) . toBe ( parseInt ( centerBar . style . left ) ) ;
656
681
} ) ;
657
682
658
683
it ( 'support indicatorAlign when tabPosition=left' , async ( ) => {
659
- const { container : startContainer } = render (
684
+ const { container : startContainer , rerender : rerenderStart } = render (
660
685
< Tabs
661
686
tabPosition = "left"
662
687
items = { [ { key : 'test' , label : 'test' , icon : 'test' } ] }
@@ -688,6 +713,31 @@ describe('Tabs.Basic', () => {
688
713
689
714
expect ( parseInt ( startBar . style . top ) ) . toBeLessThanOrEqual ( parseInt ( centerBar . style . top ) ) ;
690
715
expect ( parseInt ( centerBar . style . top ) ) . toBeLessThanOrEqual ( parseInt ( endBar . style . top ) ) ;
716
+
717
+ // 测试动态切换 align
718
+ rerenderStart (
719
+ < Tabs
720
+ tabPosition = "left"
721
+ items = { [ { key : 'test' , label : 'test' , icon : 'test' } ] }
722
+ indicator = { { size : origin => origin - 20 , align : 'center' } }
723
+ /> ,
724
+ ) ;
725
+ await waitFakeTimer ( ) ;
726
+ const newStartBar = startContainer . querySelector < HTMLDivElement > ( selectors ) ;
727
+ expect ( parseInt ( newStartBar . style . top ) ) . toBe ( parseInt ( centerBar . style . top ) ) ;
728
+
729
+ // 测试 RTL 模式下的位置
730
+ const { container : rtlContainer } = render (
731
+ < Tabs
732
+ tabPosition = "left"
733
+ direction = "rtl"
734
+ items = { [ { key : 'test' , label : 'test' , icon : 'test' } ] }
735
+ indicator = { { size : origin => origin - 20 , align : 'center' } }
736
+ /> ,
737
+ ) ;
738
+ await waitFakeTimer ( ) ;
739
+ const rtlBar = rtlContainer . querySelector < HTMLDivElement > ( selectors ) ;
740
+ expect ( rtlBar . style . transform ) . toContain ( 'translateY(-50%)' ) ;
691
741
} ) ;
692
742
it ( 'support classnames and styles' , ( ) => {
693
743
const customClassNames = {
0 commit comments