diff --git a/__tests__/PropTypesDevelopmentReact15.js b/__tests__/PropTypesDevelopmentReact15.js index ebc9590..74d15f2 100644 --- a/__tests__/PropTypesDevelopmentReact15.js +++ b/__tests__/PropTypesDevelopmentReact15.js @@ -850,6 +850,12 @@ describe('PropTypesDevelopmentReact15', () => { 'Invalid prop `testProp` of value `false` supplied to ' + '`testComponent`, expected one of [0,"false"].', ); + typeCheckFail( + PropTypes.oneOf([Symbol('red'), Symbol('blue')]), + Symbol('green'), + 'Invalid prop `testProp` of value `Symbol(green)` supplied to ' + + '`testComponent`, expected one of ["Symbol(red)","Symbol(blue)"].', + ); }); it('should not warn for valid values', () => { diff --git a/__tests__/PropTypesDevelopmentStandalone-test.js b/__tests__/PropTypesDevelopmentStandalone-test.js index 4267b6e..74687dd 100644 --- a/__tests__/PropTypesDevelopmentStandalone-test.js +++ b/__tests__/PropTypesDevelopmentStandalone-test.js @@ -852,6 +852,12 @@ describe('PropTypesDevelopmentStandalone', () => { 'Invalid prop `testProp` of value `false` supplied to ' + '`testComponent`, expected one of [0,"false"].', ); + typeCheckFail( + PropTypes.oneOf([Symbol('red'), Symbol('blue')]), + Symbol('green'), + 'Invalid prop `testProp` of value `Symbol(green)` supplied to ' + + '`testComponent`, expected one of ["Symbol(red)","Symbol(blue)"].', + ); }); it('should not warn for valid values', () => { diff --git a/__tests__/PropTypesProductionReact15-test.js b/__tests__/PropTypesProductionReact15-test.js index f2afa67..1059617 100644 --- a/__tests__/PropTypesProductionReact15-test.js +++ b/__tests__/PropTypesProductionReact15-test.js @@ -718,6 +718,12 @@ describe('PropTypesProductionReact15', () => { 'Invalid prop `testProp` of value `false` supplied to ' + '`testComponent`, expected one of [0,"false"].', ); + expectNoop( + PropTypes.oneOf([Symbol('red'), Symbol('blue')]), + Symbol('green'), + 'Invalid prop `testProp` of value `Symbol(green)` supplied to ' + + '`testComponent`, expected one of ["Symbol(red)","Symbol(blue)"].', + ); }); it('should not warn for valid values', () => { diff --git a/factoryWithTypeCheckers.js b/factoryWithTypeCheckers.js index 1942d0e..1f9af32 100644 --- a/factoryWithTypeCheckers.js +++ b/factoryWithTypeCheckers.js @@ -302,8 +302,13 @@ module.exports = function(isValidElement, throwOnDirectAccess) { } } - var valuesString = JSON.stringify(expectedValues); - return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { + if (getPropType(value) === 'symbol') { + return String(value); + } + return value; + }); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); } return createChainableTypeChecker(validate); }