diff --git a/src/addons/transitions/ReactTransitionGroup.js b/src/addons/transitions/ReactTransitionGroup.js
index 623838c49f..9e2d4911ab 100644
--- a/src/addons/transitions/ReactTransitionGroup.js
+++ b/src/addons/transitions/ReactTransitionGroup.js
@@ -44,6 +44,11 @@ var ReactTransitionGroupMixin = {
'getTransitionConfig() method.'
);
+ // don't animate undefined children
+ if (typeof sourceChildren === 'undefined') {
+ return;
+ }
+
var children = {};
var childMapping = ReactTransitionKeySet.getChildMapping(sourceChildren);
var transitionConfig = this.getTransitionConfig();
diff --git a/src/addons/transitions/__tests__/ReactTransitionGroup-test.js b/src/addons/transitions/__tests__/ReactTransitionGroup-test.js
index bfddd7be5a..8455d3fba1 100644
--- a/src/addons/transitions/__tests__/ReactTransitionGroup-test.js
+++ b/src/addons/transitions/__tests__/ReactTransitionGroup-test.js
@@ -26,18 +26,18 @@ var mocks;
// Most of the real functionality is covered in other unit tests, this just
// makes sure we're wired up correctly.
describe('ReactTransitionGroup', function() {
+ var container;
+
beforeEach(function() {
React = require('React');
ReactTransitionGroup = require('ReactTransitionGroup');
mocks = require('mocks');
+
+ container = document.createElement('div');
});
it('should warn after time with no transitionend', function() {
- var container;
- var a;
-
- container = document.createElement('div');
- a = React.renderComponent(
+ var a = React.renderComponent(
,
@@ -65,7 +65,6 @@ describe('ReactTransitionGroup', function() {
});
it('should keep both sets of DOM nodes around', function() {
- var container = document.createElement('div');
var a = React.renderComponent(
@@ -83,4 +82,14 @@ describe('ReactTransitionGroup', function() {
expect(a.getDOMNode().childNodes[0].id).toBe('two');
expect(a.getDOMNode().childNodes[1].id).toBe('one');
});
+
+ describe('with an undefined child', function () {
+ it('should fail silently', function () {
+ var a = React.renderComponent(
+
+ ,
+ container
+ );
+ });
+ });
});