@@ -8,9 +8,10 @@ describe('use:clickOutside', () => {
88 const onClickOutside = vi . fn ( ) ;
99
1010 it ( 'should trigger a callback only when clicked outside' , async ( ) => {
11+ const user = userEvent . setup ( ) ;
12+
1113 render ( Subject , { onClickOutside } ) ;
1214
13- const user = userEvent . setup ( ) ;
1415 const subject = screen . getByTestId ( 'subject' ) ;
1516 const insideButton = screen . getByTestId ( 'inside' ) ;
1617 const outsideButton = screen . getByTestId ( 'outside' ) ;
@@ -26,9 +27,9 @@ describe('use:clickOutside', () => {
2627 } ) ;
2728
2829 it ( 'should not trigger if clicked element gets removed from the DOM' , async ( ) => {
30+ const user = userEvent . setup ( ) ;
2931 render ( Subject , { onClickOutside } ) ;
3032
31- const user = userEvent . setup ( ) ;
3233 const insideButton = screen . getByTestId ( 'inside' ) ;
3334
3435 insideButton . addEventListener ( 'click' , ( ) => {
@@ -39,4 +40,38 @@ describe('use:clickOutside', () => {
3940
4041 expect ( onClickOutside ) . not . toHaveBeenCalled ( ) ;
4142 } ) ;
43+
44+ it ( 'should not trigger if click starts inside element and moves out' , async ( ) => {
45+ const user = userEvent . setup ( ) ;
46+ render ( Subject , { onClickOutside } ) ;
47+
48+ const insideButton = screen . getByTestId ( 'inside' ) ;
49+ const outsideButton = screen . getByTestId ( 'outside' ) ;
50+
51+ // 1. press the left mouse button on the inside button
52+ // 2. release the left mouse button on the outside button
53+ await user . pointer ( [
54+ { keys : '[MouseLeft>]' , target : insideButton } ,
55+ { keys : '[/MouseLeft]' , target : outsideButton } ,
56+ ] ) ;
57+
58+ expect ( onClickOutside ) . not . toHaveBeenCalled ( ) ;
59+ } ) ;
60+
61+ it ( 'should not trigger if click starts outside element and moves in' , async ( ) => {
62+ const user = userEvent . setup ( ) ;
63+ render ( Subject , { onClickOutside } ) ;
64+
65+ const insideButton = screen . getByTestId ( 'inside' ) ;
66+ const outsideButton = screen . getByTestId ( 'outside' ) ;
67+
68+ // 1. press the left mouse button on the inside button
69+ // 2. release the left mouse button on the outside button
70+ await user . pointer ( [
71+ { keys : '[MouseLeft>]' , target : outsideButton } ,
72+ { keys : '[/MouseLeft]' , target : insideButton } ,
73+ ] ) ;
74+
75+ expect ( onClickOutside ) . not . toHaveBeenCalled ( ) ;
76+ } ) ;
4277} ) ;
0 commit comments