diff --git a/src/isomorphic/classic/types/ReactPropTypes.js b/src/isomorphic/classic/types/ReactPropTypes.js index 4d9ac1d846107..9b419cc769594 100644 --- a/src/isomorphic/classic/types/ReactPropTypes.js +++ b/src/isomorphic/classic/types/ReactPropTypes.js @@ -16,6 +16,7 @@ var ReactPropTypeLocationNames = require('ReactPropTypeLocationNames'); var emptyFunction = require('emptyFunction'); var getIteratorFn = require('getIteratorFn'); +var warning = require('warning'); /** * Collection of methods that allow declaration and validation of props that are @@ -226,11 +227,8 @@ function createInstanceTypeChecker(expectedClass) { function createEnumTypeChecker(expectedValues) { if (!Array.isArray(expectedValues)) { - return createChainableTypeChecker(function() { - return new Error( - `Invalid argument supplied to oneOf, expected an instance of array.` - ); - }); + warning(false, 'Invalid argument supplied to oneOf, expected an instance of array.'); + return emptyFunction.thatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { @@ -288,11 +286,8 @@ function createObjectOfTypeChecker(typeChecker) { function createUnionTypeChecker(arrayOfTypeCheckers) { if (!Array.isArray(arrayOfTypeCheckers)) { - return createChainableTypeChecker(function() { - return new Error( - `Invalid argument supplied to oneOfType, expected an instance of array.` - ); - }); + warning(false, 'Invalid argument supplied to oneOfType, expected an instance of array.'); + return emptyFunction.thatReturnsNull; } function validate(props, propName, componentName, location, propFullName) { diff --git a/src/isomorphic/classic/types/__tests__/ReactPropTypes-test.js b/src/isomorphic/classic/types/__tests__/ReactPropTypes-test.js index 14559720aeb0d..4e787857c76e3 100644 --- a/src/isomorphic/classic/types/__tests__/ReactPropTypes-test.js +++ b/src/isomorphic/classic/types/__tests__/ReactPropTypes-test.js @@ -590,12 +590,16 @@ describe('ReactPropTypes', function() { }); describe('OneOf Types', function() { - it('should fail for invalid argument', function() { - typeCheckFail( - PropTypes.oneOf('red', 'blue'), - 'red', - 'Invalid argument supplied to oneOf, expected an instance of array.' - ); + it('should warn but not error for invalid argument', function() { + spyOn(console, 'error'); + + PropTypes.oneOf('red', 'blue'); + + expect(console.error).toHaveBeenCalled(); + expect(console.error.calls.argsFor(0)[0]) + .toContain('Invalid argument supplied to oneOf, expected an instance of array.'); + + typeCheckPass(PropTypes.oneOf('red', 'blue'), 'red'); }); it('should warn for invalid values', function() { @@ -651,12 +655,16 @@ describe('ReactPropTypes', function() { }); describe('Union Types', function() { - it('should fail for invalid argument', function() { - typeCheckFail( - PropTypes.oneOfType(PropTypes.string, PropTypes.number), - 'red', - 'Invalid argument supplied to oneOfType, expected an instance of array.' - ); + it('should warn but not error for invalid argument', function() { + spyOn(console, 'error'); + + PropTypes.oneOfType(PropTypes.string, PropTypes.number); + + expect(console.error).toHaveBeenCalled(); + expect(console.error.calls.argsFor(0)[0]) + .toContain('Invalid argument supplied to oneOfType, expected an instance of array.'); + + typeCheckPass(PropTypes.oneOf(PropTypes.string, PropTypes.number), []); }); it('should warn if none of the types are valid', function() {