@@ -293,7 +293,12 @@ describe('ReactLazy', () => {
293
293
294
294
await Promise . resolve ( ) ;
295
295
296
- expect ( Scheduler ) . toFlushAndYield ( [ 'Hi' ] ) ;
296
+ expect ( ( ) => expect ( Scheduler ) . toFlushAndYield ( [ 'Hi' ] ) ) . toErrorDev (
297
+ 'Warning: T: Support for defaultProps ' +
298
+ 'will be removed from function components in a future major ' +
299
+ 'release. Use JavaScript default parameters instead.' ,
300
+ ) ;
301
+
297
302
expect ( root ) . toMatchRenderedOutput ( 'Hi' ) ;
298
303
299
304
T . defaultProps = { text : 'Hi again' } ;
@@ -343,7 +348,14 @@ describe('ReactLazy', () => {
343
348
344
349
await Promise . resolve ( ) ;
345
350
346
- expect ( Scheduler ) . toFlushAndYield ( [ 'Lazy' , 'Sibling' , 'A' ] ) ;
351
+ expect ( ( ) =>
352
+ expect ( Scheduler ) . toFlushAndYield ( [ 'Lazy' , 'Sibling' , 'A' ] ) ,
353
+ ) . toErrorDev (
354
+ 'Warning: LazyImpl: Support for defaultProps ' +
355
+ 'will be removed from function components in a future major ' +
356
+ 'release. Use JavaScript default parameters instead.' ,
357
+ ) ;
358
+
347
359
expect ( root ) . toMatchRenderedOutput ( 'SiblingA' ) ;
348
360
349
361
// Lazy should not re-render
@@ -643,7 +655,12 @@ describe('ReactLazy', () => {
643
655
expect ( root ) . not . toMatchRenderedOutput ( 'Hi Bye' ) ;
644
656
645
657
await Promise . resolve ( ) ;
646
- expect ( Scheduler ) . toFlushAndYield ( [ 'Hi Bye' ] ) ;
658
+ expect ( ( ) => expect ( Scheduler ) . toFlushAndYield ( [ 'Hi Bye' ] ) ) . toErrorDev (
659
+ 'Warning: T: Support for defaultProps ' +
660
+ 'will be removed from function components in a future major ' +
661
+ 'release. Use JavaScript default parameters instead.' ,
662
+ ) ;
663
+
647
664
expect ( root ) . toMatchRenderedOutput ( 'Hi Bye' ) ;
648
665
649
666
root . update (
@@ -732,7 +749,11 @@ describe('ReactLazy', () => {
732
749
) ;
733
750
} ) ;
734
751
735
- async function verifyInnerPropTypesAreChecked ( Add ) {
752
+ async function verifyInnerPropTypesAreChecked (
753
+ Add ,
754
+ shouldWarnAboutFunctionDefaultProps ,
755
+ shouldWarnAboutMemoDefaultProps ,
756
+ ) {
736
757
const LazyAdd = lazy ( ( ) => fakeImport ( Add ) ) ;
737
758
expect ( ( ) => {
738
759
LazyAdd . propTypes = { } ;
@@ -753,15 +774,28 @@ describe('ReactLazy', () => {
753
774
) ;
754
775
755
776
expect ( Scheduler ) . toFlushAndYield ( [ 'Loading...' ] ) ;
777
+
756
778
expect ( root ) . not . toMatchRenderedOutput ( '22' ) ;
757
779
758
780
// Mount
759
781
await Promise . resolve ( ) ;
760
782
expect ( ( ) => {
761
783
Scheduler . unstable_flushAll ( ) ;
762
- } ) . toErrorDev ( [
763
- 'Invalid prop `inner` of type `string` supplied to `Add`, expected `number`.' ,
764
- ] ) ;
784
+ } ) . toErrorDev (
785
+ shouldWarnAboutFunctionDefaultProps
786
+ ? [
787
+ 'Add: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.' ,
788
+ 'Invalid prop `inner` of type `string` supplied to `Add`, expected `number`.' ,
789
+ ]
790
+ : shouldWarnAboutMemoDefaultProps
791
+ ? [
792
+ 'Add: Support for defaultProps will be removed from memo components in a future major release. Use JavaScript default parameters instead.' ,
793
+ 'Invalid prop `inner` of type `string` supplied to `Add`, expected `number`.' ,
794
+ ]
795
+ : [
796
+ 'Invalid prop `inner` of type `string` supplied to `Add`, expected `number`.' ,
797
+ ] ,
798
+ ) ;
765
799
expect ( root ) . toMatchRenderedOutput ( '22' ) ;
766
800
767
801
// Update
@@ -792,7 +826,7 @@ describe('ReactLazy', () => {
792
826
Add . defaultProps = {
793
827
innerWithDefault : 42 ,
794
828
} ;
795
- await verifyInnerPropTypesAreChecked ( Add ) ;
829
+ await verifyInnerPropTypesAreChecked ( Add , true ) ;
796
830
} ) ;
797
831
798
832
it ( 'respects propTypes on function component without defaultProps' , async ( ) => {
@@ -874,7 +908,7 @@ describe('ReactLazy', () => {
874
908
Add . defaultProps = {
875
909
innerWithDefault : 42 ,
876
910
} ;
877
- await verifyInnerPropTypesAreChecked ( Add ) ;
911
+ await verifyInnerPropTypesAreChecked ( Add , false , true ) ;
878
912
} ) ;
879
913
880
914
it ( 'respects propTypes on outer memo component without defaultProps' , async ( ) => {
@@ -901,7 +935,7 @@ describe('ReactLazy', () => {
901
935
Add . defaultProps = {
902
936
innerWithDefault : 42 ,
903
937
} ;
904
- await verifyInnerPropTypesAreChecked ( React . memo ( Add ) ) ;
938
+ await verifyInnerPropTypesAreChecked ( React . memo ( Add ) , true ) ;
905
939
} ) ;
906
940
907
941
it ( 'respects propTypes on inner memo component without defaultProps' , async ( ) => {
@@ -944,9 +978,10 @@ describe('ReactLazy', () => {
944
978
await Promise . resolve ( ) ;
945
979
expect ( ( ) => {
946
980
expect ( Scheduler ) . toFlushAndYield ( [ 'Inner default text' ] ) ;
947
- } ) . toErrorDev (
981
+ } ) . toErrorDev ( [
982
+ 'T: Support for defaultProps will be removed from function components in a future major release. Use JavaScript default parameters instead.' ,
948
983
'The prop `text` is marked as required in `T`, but its value is `undefined`' ,
949
- ) ;
984
+ ] ) ;
950
985
expect ( root ) . toMatchRenderedOutput ( 'Inner default text' ) ;
951
986
952
987
// Update
@@ -1058,7 +1093,11 @@ describe('ReactLazy', () => {
1058
1093
1059
1094
// Mount
1060
1095
await Promise . resolve ( ) ;
1061
- expect ( Scheduler ) . toFlushWithoutYielding ( ) ;
1096
+ expect ( ( ) => {
1097
+ expect ( Scheduler ) . toFlushWithoutYielding ( ) ;
1098
+ } ) . toErrorDev (
1099
+ 'Unknown: Support for defaultProps will be removed from memo components in a future major release. Use JavaScript default parameters instead.' ,
1100
+ ) ;
1062
1101
expect ( root ) . toMatchRenderedOutput ( '4' ) ;
1063
1102
1064
1103
// Update (shallowly equal)
@@ -1142,7 +1181,12 @@ describe('ReactLazy', () => {
1142
1181
1143
1182
// Mount
1144
1183
await Promise . resolve ( ) ;
1145
- expect ( Scheduler ) . toFlushWithoutYielding ( ) ;
1184
+ expect ( ( ) => {
1185
+ expect ( Scheduler ) . toFlushWithoutYielding ( ) ;
1186
+ } ) . toErrorDev ( [
1187
+ 'Memo: Support for defaultProps will be removed from memo components in a future major release. Use JavaScript default parameters instead.' ,
1188
+ 'Unknown: Support for defaultProps will be removed from memo components in a future major release. Use JavaScript default parameters instead.' ,
1189
+ ] ) ;
1146
1190
expect ( root ) . toMatchRenderedOutput ( '4' ) ;
1147
1191
1148
1192
// Update
0 commit comments