Make ReactTestUtils.scryRenderedComponentWithClass find multiple classes
Paul O’Shannessy committed
Sep 23, 2015 at 12:42 UTC
e9c571acc6c87c7b1d14db1635f36bba7082d192
2 files changed
+49
-6
src/test/ReactTestUtils.js
+8
-6
@@ -174,14 +174,16 @@ var ReactTestUtils = {
174
* components with the class name matching `className`.
175
* @return {array} an array of all the matches.
176
*/
177
- scryRenderedDOMComponentsWithClass: function(root, className) {
177
+ scryRenderedDOMComponentsWithClass: function(root, classNames) {
178
+ if (!Array.isArray(classNames)) {
179
+ classNames = classNames.split(/\s+/);
180
+ }
181
return ReactTestUtils.findAllInRenderedTree(root, function(inst) {
182
if (ReactTestUtils.isDOMComponent(inst)) {
180
- var instClassName = ReactDOM.findDOMNode(inst).className;
181
- return (
182
- instClassName &&
183
- (('' + instClassName).split(/\s+/)).indexOf(className) !== -1
184
- );
183
+ var classList = ReactDOM.findDOMNode(inst).className.split(/\s+/);
184
+ return classNames.every(function(className) {
185
+ return classList.indexOf(className) !== -1;
186
+ });
187
}
188
return false;
189
});
src/test/__tests__/ReactTestUtils-test.js
+41
@@ -223,6 +223,47 @@ describe('ReactTestUtils', function() {
223
expect(scryResults.length).toBe(1);
224
});
225
226
+ it('can scryRenderedDOMComponentsWithClass with multiple classes', function() {
227
+ var Wrapper = React.createClass({
228
+ render: function() {
229
+ return <div>Hello <span className={'x y z'}>Jim</span></div>;
230
+ },
231
+ });
232
+ var renderedComponent = ReactTestUtils.renderIntoDocument(<Wrapper />);
233
+ var scryResults1 = ReactTestUtils.scryRenderedDOMComponentsWithClass(
234
+ renderedComponent,
235
+ 'x y'
236
+ );
237
+ expect(scryResults1.length).toBe(1);
238
+
239
+ var scryResults2 = ReactTestUtils.scryRenderedDOMComponentsWithClass(
240
+ renderedComponent,
241
+ 'x z'
242
+ );
243
+ expect(scryResults2.length).toBe(1);
244
+
245
+ var scryResults3 = ReactTestUtils.scryRenderedDOMComponentsWithClass(
246
+ renderedComponent,
247
+ ['x', 'y']
248
+ );
249
+ expect(scryResults3.length).toBe(1);
250
+
251
+ expect(scryResults1[0]).toBe(scryResults2[0]);
252
+ expect(scryResults1[0]).toBe(scryResults3[0]);
253
+
254
+ var scryResults4 = ReactTestUtils.scryRenderedDOMComponentsWithClass(
255
+ renderedComponent,
256
+ ['x', 'a']
257
+ );
258
+ expect(scryResults4.length).toBe(0);
259
+
260
+ var scryResults5 = ReactTestUtils.scryRenderedDOMComponentsWithClass(
261
+ renderedComponent,
262
+ ['x a']
263
+ );
264
+ expect(scryResults5.length).toBe(0);
265
+ });
266
+
267
it('traverses children in the correct order', function() {
268
var Wrapper = React.createClass({
269
render: function() {