From 36a724fecaed3c52ce8140683f452524934caceb Mon Sep 17 00:00:00 2001 From: CommitSyncScript Date: Fri, 21 Jun 2013 13:48:48 -0700 Subject: [PATCH] Add `reactComponentExpect#toBeComponentOfType` This adds a `toBeComponentOfType` method to `reactComponentExpect`. Now that we are injecting composite native components, `toBeDOMComponentWithTag` will not suffice and should be deprecated. --- src/core/ReactDOM.js | 5 +++-- .../ReactCompositeComponentTransferProps-test.js | 6 +++--- src/test/ReactTestUtils.js | 8 ++++++++ src/test/reactComponentExpect.js | 12 ++++++++++++ 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/core/ReactDOM.js b/src/core/ReactDOM.js index 2fe78e99a7..b1882b3be0 100644 --- a/src/core/ReactDOM.js +++ b/src/core/ReactDOM.js @@ -41,15 +41,16 @@ var objMapKeyVal = require('objMapKeyVal'); */ function createDOMComponentClass(tag, omitClose) { var Constructor = function() {}; - Constructor.prototype = new ReactNativeComponent(tag, omitClose); Constructor.prototype.constructor = Constructor; - return function(props, children) { + var ConvenienceConstructor = function(props, children) { var instance = new Constructor(); instance.construct.apply(instance, arguments); return instance; }; + ConvenienceConstructor.componentConstructor = Constructor; + return ConvenienceConstructor; } /** diff --git a/src/core/__tests__/ReactCompositeComponentTransferProps-test.js b/src/core/__tests__/ReactCompositeComponentTransferProps-test.js index 47cc7455af..70c7e27532 100644 --- a/src/core/__tests__/ReactCompositeComponentTransferProps-test.js +++ b/src/core/__tests__/ReactCompositeComponentTransferProps-test.js @@ -52,7 +52,7 @@ describe('ReactCompositeComponent-transferProps', function() { reactComponentExpect(instance) .expectRenderedChild() - .toBeDOMComponentWithTag('input') + .toBeComponentOfType(React.DOM.input) .scalarPropsEqual({ className: 'textinput', style: {display: 'block'}, @@ -67,7 +67,7 @@ describe('ReactCompositeComponent-transferProps', function() { reactComponentExpect(instance) .expectRenderedChild() - .toBeDOMComponentWithTag('input') + .toBeComponentOfType(React.DOM.input) .scalarPropsEqual({placeholder: 'Type here...'}); }); @@ -81,7 +81,7 @@ describe('ReactCompositeComponent-transferProps', function() { reactComponentExpect(instance) .expectRenderedChild() - .toBeDOMComponentWithTag('input') + .toBeComponentOfType(React.DOM.input) .scalarPropsEqual({ className: 'textinput hidden_elem', style: { diff --git a/src/test/ReactTestUtils.js b/src/test/ReactTestUtils.js index 95651d5c90..e703472ea8 100644 --- a/src/test/ReactTestUtils.js +++ b/src/test/ReactTestUtils.js @@ -45,6 +45,14 @@ var ReactTestUtils = { return React.renderComponent(instance, div); }, + isComponentOfType: function(inst, type) { + return !!( + inst && + ReactComponent.isValidComponent(inst) && + inst.constructor === type.componentConstructor + ); + }, + isDOMComponent: function(inst) { return !!(inst && ReactComponent.isValidComponent(inst) && diff --git a/src/test/reactComponentExpect.js b/src/test/reactComponentExpect.js index 0a359fe2d2..dc664075bc 100644 --- a/src/test/reactComponentExpect.js +++ b/src/test/reactComponentExpect.js @@ -104,6 +104,14 @@ mergeInto(reactComponentExpect.prototype, { // Matchers ------------------------------------------------------------------ + toBeComponentOfType: function(convenienceConstructor) { + expect(ReactTestUtils.isComponentOfType( + this.instance(), + convenienceConstructor + )).toBe(true); + return this; + }, + /** * A component that is created with React.createClass. Just duck typing * here. @@ -149,6 +157,10 @@ mergeInto(reactComponentExpect.prototype, { return this; }, + /** + * @deprecated + * @see toBeComponentOfType + */ toBeDOMComponentWithTag: function(tag) { this.toBeDOMComponent(); expect(this.instance().tagName).toBe(tag.toUpperCase());