20
21
var Component;
22
var MyComponent;
23
-var requiredMessage =
24
- 'Required prop `testProp` was not specified in `testComponent`.';
23
24
function typeCheckFail(declaration, value, message) {
25
var props = {testProp: value};
35
expect(error.message).toBe(message);
36
}
37
38
+function typeCheckFailRequiredValues(declaration) {
39
+ var specifiedButIsNullMsg = 'The prop `testProp` is marked as required in ' +
40
+ '`testComponent`, but its value is `null`.';
41
+ var unspecifiedMsg = 'The prop `testProp` is marked as required in ' +
42
+ '`testComponent`, but its value is \`undefined\`.';
43
+ var props1 = {testProp: null};
44
+ var error1 = declaration(
45
+ props1,
46
+ 'testProp',
47
+ 'testComponent',
48
+ ReactPropTypeLocations.prop,
49
+ null,
50
+ ReactPropTypesSecret
51
+ );
52
+ expect(error1 instanceof Error).toBe(true);
53
+ expect(error1.message).toBe(specifiedButIsNullMsg);
54
+ var props2 = {testProp: undefined};
55
+ var error2 = declaration(
56
+ props2,
57
+ 'testProp',
58
+ 'testComponent',
59
+ ReactPropTypeLocations.prop,
60
+ null,
61
+ ReactPropTypesSecret
62
+ );
63
+ expect(error2 instanceof Error).toBe(true);
64
+ expect(error2.message).toBe(unspecifiedMsg);
65
+ var props3 = {};
66
+ var error3 = declaration(
67
+ props3,
68
+ 'testProp',
69
+ 'testComponent',
70
+ ReactPropTypeLocations.prop,
71
+ null,
72
+ ReactPropTypesSecret
73
+ );
74
+ expect(error3 instanceof Error).toBe(true);
75
+ expect(error3.message).toBe(unspecifiedMsg);
76
+}
77
+
78
function typeCheckPass(declaration, value) {
79
var props = {testProp: value};
80
var error = declaration(
184
});
185
186
it('should warn for missing required values', function() {
149
- typeCheckFail(PropTypes.string.isRequired, null, requiredMessage);
150
- typeCheckFail(PropTypes.string.isRequired, undefined, requiredMessage);
187
+ typeCheckFailRequiredValues(PropTypes.string.isRequired);
188
});
189
190
it('should warn if called manually in development', function() {
250
});
251
252
it('should warn for missing required values', function() {
216
- typeCheckFail(PropTypes.any.isRequired, null, requiredMessage);
217
- typeCheckFail(PropTypes.any.isRequired, undefined, requiredMessage);
253
+ typeCheckFailRequiredValues(PropTypes.any.isRequired);
254
});
255
256
it('should warn if called manually in development', function() {
343
});
344
345
it('should warn for missing required values', function() {
310
- typeCheckFail(
311
- PropTypes.arrayOf(PropTypes.number).isRequired,
312
- null,
313
- requiredMessage
314
- );
315
- typeCheckFail(
316
- PropTypes.arrayOf(PropTypes.number).isRequired,
317
- undefined,
318
- requiredMessage
346
+ typeCheckFailRequiredValues(
347
+ PropTypes.arrayOf(PropTypes.number).isRequired
348
);
349
});
350
435
});
436
437
it('should warn for missing required values', function() {
409
- typeCheckFail(PropTypes.element.isRequired, null, requiredMessage);
410
- typeCheckFail(PropTypes.element.isRequired, undefined, requiredMessage);
438
+ typeCheckFailRequiredValues(PropTypes.element.isRequired);
439
});
440
441
it('should warn if called manually in development', function() {
521
});
522
523
it('should warn for missing required values', function() {
496
- typeCheckFail(
497
- PropTypes.instanceOf(String).isRequired, null, requiredMessage
498
- );
499
- typeCheckFail(
500
- PropTypes.instanceOf(String).isRequired, undefined, requiredMessage
501
- );
524
+ typeCheckFailRequiredValues(PropTypes.instanceOf(String).isRequired);
525
});
526
527
it('should warn if called manually in development', function() {
624
});
625
626
it('should warn for missing required values', function() {
604
- typeCheckFail(
605
- PropTypes.node.isRequired,
606
- null,
607
- 'Required prop `testProp` was not specified in `testComponent`.'
608
- );
609
- typeCheckFail(
610
- PropTypes.node.isRequired,
611
- undefined,
612
- 'Required prop `testProp` was not specified in `testComponent`.'
613
- );
627
+ typeCheckFailRequiredValues(PropTypes.node.isRequired);
628
});
629
630
it('should accept empty array for required props', function() {
738
});
739
740
it('should warn for missing required values', function() {
727
- typeCheckFail(
728
- PropTypes.objectOf(PropTypes.number).isRequired,
729
- null,
730
- requiredMessage
731
- );
732
- typeCheckFail(
733
- PropTypes.objectOf(PropTypes.number).isRequired,
734
- undefined,
735
- requiredMessage
741
+ typeCheckFailRequiredValues(
742
+ PropTypes.objectOf(PropTypes.number).isRequired
743
);
744
});
745
811
});
812
813
it('should warn for missing required values', function() {
807
- typeCheckFail(
808
- PropTypes.oneOf(['red', 'blue']).isRequired,
809
- null,
810
- requiredMessage
811
- );
812
- typeCheckFail(
813
- PropTypes.oneOf(['red', 'blue']).isRequired,
814
- undefined,
815
- requiredMessage
816
- );
814
+ typeCheckFailRequiredValues(PropTypes.oneOf(['red', 'blue']).isRequired);
815
});
816
817
it('should warn if called manually in development', function() {
880
});
881
882
it('should warn for missing required values', function() {
885
- typeCheckFail(
886
- PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
887
- null,
888
- requiredMessage
889
- );
890
- typeCheckFail(
891
- PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
892
- undefined,
893
- requiredMessage
883
+ typeCheckFailRequiredValues(
884
+ PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired
885
);
886
});
887
941
typeCheckFail(
942
PropTypes.shape({key: PropTypes.number.isRequired}),
943
{},
953
- 'Required prop `testProp.key` was not specified in `testComponent`.'
944
+ 'The prop `testProp.key` is marked as required in `testComponent`, ' +
945
+ 'but its value is `undefined`.'
946
);
947
});
948
953
secondKey: PropTypes.number.isRequired,
954
}),
955
{},
964
- 'Required prop `testProp.key` was not specified in `testComponent`.'
956
+ 'The prop `testProp.key` is marked as required in `testComponent`, ' +
957
+ 'but its value is `undefined`.'
958
);
959
});
960
976
});
977
978
it('should warn for missing required values', function() {
986
- typeCheckFail(
987
- PropTypes.shape({key: PropTypes.number}).isRequired,
988
- null,
989
- requiredMessage
990
- );
991
- typeCheckFail(
992
- PropTypes.shape({key: PropTypes.number}).isRequired,
993
- undefined,
994
- requiredMessage
979
+ typeCheckFailRequiredValues(
980
+ PropTypes.shape({key: PropTypes.number}).isRequired
981
);
982
});
983