@@ -93,6 +93,32 @@ test('.toHaveClass', () => {
9393 ) . toThrowError ( / ( n o n e ) / )
9494} )
9595
96+ test ( '.toHaveClass with regular expressions' , ( ) => {
97+ const { queryByTestId} = renderElementWithClasses ( )
98+
99+ expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( / b t n / )
100+ expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( / d a n g e r / )
101+ expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass (
102+ / - d a n g e r $ / ,
103+ 'extra' ,
104+ / ^ b t n - [ a - z ] + $ / ,
105+ / \b b t n / ,
106+ )
107+
108+ // It does not match with "btn extra", even though it is a substring of the
109+ // class "btn extra btn-danger". This is because the regular expression is
110+ // matched against each class individually.
111+ expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass ( / b t n e x t r a / )
112+
113+ expect ( ( ) =>
114+ expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass ( / d a n g e r / ) ,
115+ ) . toThrowError ( )
116+
117+ expect ( ( ) =>
118+ expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( / d a n g e r o u s / ) ,
119+ ) . toThrowError ( )
120+ } )
121+
96122test ( '.toHaveClass with exact mode option' , ( ) => {
97123 const { queryByTestId} = renderElementWithClasses ( )
98124
@@ -102,19 +128,21 @@ test('.toHaveClass with exact mode option', () => {
102128 expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass ( 'btn extra' , {
103129 exact : true ,
104130 } )
105- expect (
106- queryByTestId ( 'delete-button' ) ,
107- ) . not . toHaveClass ( 'btn extra btn-danger foo' , { exact : true } )
131+ expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass (
132+ 'btn extra btn-danger foo' ,
133+ { exact : true } ,
134+ )
108135
109136 expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( 'btn extra btn-danger' , {
110137 exact : false ,
111138 } )
112139 expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( 'btn extra' , {
113140 exact : false ,
114141 } )
115- expect (
116- queryByTestId ( 'delete-button' ) ,
117- ) . not . toHaveClass ( 'btn extra btn-danger foo' , { exact : false } )
142+ expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass (
143+ 'btn extra btn-danger foo' ,
144+ { exact : false } ,
145+ )
118146
119147 expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass (
120148 'btn' ,
@@ -178,3 +206,26 @@ test('.toHaveClass with exact mode option', () => {
178206 } ) ,
179207 ) . toThrowError ( / E x p e c t e d t h e e l e m e n t t o h a v e E X A C T L Y d e f i n e d c l a s s e s / )
180208} )
209+
210+ test ( '.toHaveClass combining {exact:true} and regular expressions throws an error' , ( ) => {
211+ const { queryByTestId} = renderElementWithClasses ( )
212+
213+ expect ( ( ) =>
214+ expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass ( / b t n / , {
215+ exact : true ,
216+ } ) ,
217+ ) . toThrowError ( )
218+
219+ expect ( ( ) =>
220+ expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass (
221+ / - d a n g e r $ / ,
222+ 'extra' ,
223+ / \b b t n / ,
224+ { exact : true } ,
225+ ) ,
226+ ) . toThrowError ( )
227+
228+ expect ( ( ) =>
229+ expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( / d a n g e r / , { exact : true } ) ,
230+ ) . toThrowError ( )
231+ } )
0 commit comments