@samitouri / QOS-React-2 / commits / e9c571acc6

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() {