The library for web and native user interfaces.
Restore @spicyj's lifecycle tests
These got lost in a rebase.
CommitSyncScript committed
Jun 24, 2013 at 18:27 UTC
bd8ecc1caa59dba79d79a126343a666ef4513582
1 file changed
+64
src/core/__tests__/ReactComponentLifeCycle-test.js
+64
@@ -434,5 +434,69 @@ describe('ReactComponentLifeCycle', function() {
434
expect(instance.state.stateField).toBe('goodbye');
435
});
436
437
+ it('should call nested lifecycle methods in the right order', function() {
438
+ var log;
439
+ var logger = function(msg) {
440
+ return function() {
441
+ // return true for shouldComponentUpdate
442
+ log.push(msg);
443
+ return true;
444
+ };
445
+ };
446
+ var Outer = React.createClass({
447
+ render: function() {
448
+ return <div><Inner x={this.props.x} /></div>;
449
+ },
450
+ componentWillMount: logger('outer componentWillMount'),
451
+ componentDidMount: logger('outer componentDidMount'),
452
+ componentWillReceiveProps: logger('outer componentWillReceiveProps'),
453
+ shouldComponentUpdate: logger('outer shouldComponentUpdate'),
454
+ componentWillUpdate: logger('outer componentWillUpdate'),
455
+ componentDidUpdate: logger('outer componentDidUpdate'),
456
+ componentWillUnmount: logger('outer componentWillUnmount')
457
+ });
458
+ var Inner = React.createClass({
459
+ render: function() {
460
+ return <span>{this.props.x}</span>;
461
+ },
462
+ componentWillMount: logger('inner componentWillMount'),
463
+ componentDidMount: logger('inner componentDidMount'),
464
+ componentWillReceiveProps: logger('inner componentWillReceiveProps'),
465
+ shouldComponentUpdate: logger('inner shouldComponentUpdate'),
466
+ componentWillUpdate: logger('inner componentWillUpdate'),
467
+ componentDidUpdate: logger('inner componentDidUpdate'),
468
+ componentWillUnmount: logger('inner componentWillUnmount')
469
+ });
470
+ var instance;
471
+
472
+ log = [];
473
+ instance = ReactTestUtils.renderIntoDocument(<Outer x={17} />);
474
+ expect(log).toEqual([
475
+ 'outer componentWillMount',
476
+ 'inner componentWillMount',
477
+ 'inner componentDidMount',
478
+ 'outer componentDidMount'
479
+ ]);
480
+
481
+ log = [];
482
+ instance.setProps({x: 42});
483
+ expect(log).toEqual([
484
+ 'outer componentWillReceiveProps',
485
+ 'outer shouldComponentUpdate',
486
+ 'outer componentWillUpdate',
487
+ 'inner componentWillReceiveProps',
488
+ 'inner shouldComponentUpdate',
489
+ 'inner componentWillUpdate',
490
+ 'inner componentDidUpdate',
491
+ 'outer componentDidUpdate'
492
+ ]);
493
+
494
+ log = [];
495
+ instance.unmountComponent();
496
+ expect(log).toEqual([
497
+ 'outer componentWillUnmount',
498
+ 'inner componentWillUnmount'
499
+ ]);
500
+ });
501
});
502