@@ -93,6 +93,32 @@ test('.toHaveClass', () => {
93
93
) . toThrowError ( / ( n o n e ) / )
94
94
} )
95
95
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
+
96
122
test ( '.toHaveClass with exact mode option' , ( ) => {
97
123
const { queryByTestId} = renderElementWithClasses ( )
98
124
@@ -102,19 +128,21 @@ test('.toHaveClass with exact mode option', () => {
102
128
expect ( queryByTestId ( 'delete-button' ) ) . not . toHaveClass ( 'btn extra' , {
103
129
exact : true ,
104
130
} )
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
+ )
108
135
109
136
expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( 'btn extra btn-danger' , {
110
137
exact : false ,
111
138
} )
112
139
expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass ( 'btn extra' , {
113
140
exact : false ,
114
141
} )
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
+ )
118
146
119
147
expect ( queryByTestId ( 'delete-button' ) ) . toHaveClass (
120
148
'btn' ,
@@ -178,3 +206,26 @@ test('.toHaveClass with exact mode option', () => {
178
206
} ) ,
179
207
) . 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 / )
180
208
} )
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