@@ -20,7 +20,7 @@ describe('render', () => {
20
20
21
21
expect ( rendered ) . to . equal ( expected ) ;
22
22
23
- expect ( render ( < div foo = { 0 } /> ) ) . to . equal ( `<div foo="0"></div>` )
23
+ expect ( render ( < div foo = { 0 } /> ) ) . to . equal ( `<div foo="0"></div>` ) ;
24
24
} ) ;
25
25
26
26
it ( 'should collapse collapsible attributes' , ( ) => {
@@ -110,17 +110,27 @@ describe('render', () => {
110
110
match ( { } )
111
111
) ;
112
112
} ) ;
113
+
114
+ it ( 'should apply defaultProps' , ( ) => {
115
+ const Test = props => < div { ...props } /> ;
116
+ Test . defaultProps = {
117
+ foo : 'default foo' ,
118
+ bar : 'default bar'
119
+ } ;
120
+
121
+ expect ( render ( < Test /> ) , 'defaults' ) . to . equal ( '<div foo="default foo" bar="default bar"></div>' ) ;
122
+ expect ( render ( < Test bar = "b" /> ) , 'partial' ) . to . equal ( '<div foo="default foo" bar="b"></div>' ) ;
123
+ expect ( render ( < Test foo = "a" bar = "b" /> ) , 'overridden' ) . to . equal ( '<div foo="a" bar="b"></div>' ) ;
124
+ } ) ;
113
125
} ) ;
114
126
115
127
describe ( 'Classical Components' , ( ) => {
116
128
it ( 'should render classical components' , ( ) => {
117
- class Test extends Component {
129
+ let Test = spy ( class Test extends Component {
118
130
render ( { foo, children } , state ) {
119
131
return < div foo = { foo } > { children } </ div > ;
120
132
}
121
- }
122
-
123
- Test = spy ( Test ) ;
133
+ } ) ;
124
134
spy ( Test . prototype , 'render' ) ;
125
135
126
136
let rendered = render ( < Test foo = "test" > content</ Test > ) ;
@@ -147,13 +157,12 @@ describe('render', () => {
147
157
} ) ;
148
158
149
159
it ( 'should render classical components within JSX' , ( ) => {
150
- class Test extends Component {
160
+ let Test = spy ( class Test extends Component {
151
161
render ( { foo, children } , state ) {
152
162
return < div foo = { foo } > { children } </ div > ;
153
163
}
154
- }
164
+ } ) ;
155
165
156
- Test = spy ( Test ) ;
157
166
spy ( Test . prototype , 'render' ) ;
158
167
159
168
let rendered = render (
@@ -180,6 +189,22 @@ describe('render', () => {
180
189
match ( { } )
181
190
) ;
182
191
} ) ;
192
+
193
+ it ( 'should apply defaultProps' , ( ) => {
194
+ class Test extends Component {
195
+ static defaultProps = {
196
+ foo : 'default foo' ,
197
+ bar : 'default bar'
198
+ } ;
199
+ render ( props ) {
200
+ return < div { ...props } /> ;
201
+ }
202
+ }
203
+
204
+ expect ( render ( < Test /> ) , 'defaults' ) . to . equal ( '<div foo="default foo" bar="default bar"></div>' ) ;
205
+ expect ( render ( < Test bar = "b" /> ) , 'partial' ) . to . equal ( '<div foo="default foo" bar="b"></div>' ) ;
206
+ expect ( render ( < Test foo = "a" bar = "b" /> ) , 'overridden' ) . to . equal ( '<div foo="a" bar="b"></div>' ) ;
207
+ } ) ;
183
208
} ) ;
184
209
185
210
describe ( 'High-order components' , ( ) => {
@@ -206,18 +231,19 @@ describe('render', () => {
206
231
} ) ;
207
232
208
233
it ( 'should render nested high order components when shallowHighOrder=false' , ( ) => {
209
- const Outer = ( ) => < Middle /> ;
210
- const Middle = ( ) => < div > < Inner /> </ div > ;
211
- const Inner = ( ) => 'hi' ;
234
+ // using functions for meaningful generation of displayName
235
+ function Outer ( ) { return < Middle /> ; }
236
+ function Middle ( ) { return < div > < Inner /> </ div > ; }
237
+ function Inner ( ) { return 'hi' ; }
212
238
213
239
let rendered = render ( < Outer /> ) ;
214
240
expect ( rendered ) . to . equal ( '<div>hi</div>' ) ;
215
241
216
242
rendered = render ( < Outer /> , null , { shallow :true } ) ;
217
- expect ( rendered ) . to . equal ( '<Middle></Middle>' ) ;
243
+ expect ( rendered , '{shallow:true}' ) . to . equal ( '<Middle></Middle>' ) ;
218
244
219
245
rendered = render ( < Outer /> , null , { shallow :true , shallowHighOrder :false } ) ;
220
- expect ( rendered ) . to . equal ( '<div><Inner></Inner></div>' , 'but it should never render nested grandchild components' ) ;
246
+ expect ( rendered , '{shallow:true,shallowHighOrder:false}' ) . to . equal ( '<div><Inner></Inner></div>' , 'but it should never render nested grandchild components' ) ;
221
247
} ) ;
222
248
} ) ;
223
249
0 commit comments