UNPKG

enzyme

Version:

JavaScript Testing utilities for React

238 lines (209 loc) 10.4 kB
Object.defineProperty(exports, "__esModule", { value: true }); exports.batchedUpdates = exports.unmountComponentAtNode = exports.renderWithOptions = exports.childrenToArray = exports.findAllInRenderedTree = exports.findDOMNode = exports.Simulate = exports.isCompositeComponentElement = exports.isCompositeComponentWithType = exports.isCompositeComponent = exports.isDOMComponentElement = exports.isDOMComponent = exports.isElementOfType = exports.isElement = exports.mockComponent = exports.renderIntoDocument = exports.renderToStaticMarkup = exports.createShallowRenderer = undefined; var _object = require('object.assign'); var _object2 = _interopRequireDefault(_object); var _version = require('./version'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var TestUtils = void 0; /* eslint global-require: 0, import/no-mutable-exports: 0, import/no-unresolved: 0, react/no-deprecated: 0, react/no-render-return-value: 0, */ var createShallowRenderer = void 0; var renderToStaticMarkup = void 0; var renderIntoDocument = void 0; var findDOMNode = void 0; var childrenToArray = void 0; var renderWithOptions = void 0; var unmountComponentAtNode = void 0; var batchedUpdates = void 0; var shallowRendererFactory = void 0; var React = require('react'); if (_version.REACT013) { exports.renderToStaticMarkup = renderToStaticMarkup = React.renderToStaticMarkup; /* eslint-disable react/no-deprecated */ exports.findDOMNode = findDOMNode = React.findDOMNode; exports.unmountComponentAtNode = unmountComponentAtNode = React.unmountComponentAtNode; /* eslint-enable react/no-deprecated */ TestUtils = require('react/addons').addons.TestUtils; exports.batchedUpdates = batchedUpdates = require('react/addons').addons.batchedUpdates; var ReactContext = require('react/lib/ReactContext'); // Shallow rendering in 0.13 did not properly support context. This function provides a shim // around `TestUtils.createRenderer` that instead returns a ShallowRenderer that actually // works with context. See https://github.com/facebook/react/issues/3721 for more details. exports.createShallowRenderer = createShallowRenderer = function () { function createRendererCompatible() { var renderer = TestUtils.createRenderer(); renderer.render = function (originalRender) { return function () { function contextCompatibleRender(node) { var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; ReactContext.current = context; originalRender.call(this, React.createElement(node.type, node.props), context); ReactContext.current = {}; return renderer.getRenderOutput(); } return contextCompatibleRender; }(); }(renderer.render); return renderer; } return createRendererCompatible; }(); exports.renderIntoDocument = renderIntoDocument = TestUtils.renderIntoDocument; // this fixes some issues in React 0.13 with setState and jsdom... // see issue: https://github.com/airbnb/enzyme/issues/27 require('react/lib/ExecutionEnvironment').canUseDOM = true; // in 0.13, a Children.toArray function was not exported. Make our own instead. exports.childrenToArray = childrenToArray = function () { function childrenToArray(children) { var results = []; if (children !== undefined && children !== null && children !== false) { React.Children.forEach(children, function (el) { if (el !== undefined && el !== null && el !== false) { results.push(el); } }); } return results; } return childrenToArray; }(); exports.renderWithOptions = renderWithOptions = function () { function renderWithOptions(node, options) { if (options.attachTo) { return React.render(node, options.attachTo); } return TestUtils.renderIntoDocument(node); } return renderWithOptions; }(); } else { var ReactDOM = void 0; try { // eslint-disable-next-line import/no-extraneous-dependencies ReactDOM = require('react-dom'); } catch (e) { throw new Error('react-dom is an implicit dependency in order to support react@0.13-14. ' + 'Please add the appropriate version to your devDependencies. ' + 'See https://github.com/airbnb/enzyme#installation'); } // eslint-disable-next-line import/no-extraneous-dependencies exports.renderToStaticMarkup = renderToStaticMarkup = require('react-dom/server').renderToStaticMarkup; exports.findDOMNode = findDOMNode = ReactDOM.findDOMNode; exports.unmountComponentAtNode = unmountComponentAtNode = ReactDOM.unmountComponentAtNode; exports.batchedUpdates = batchedUpdates = ReactDOM.unstable_batchedUpdates; // We require the testutils, but they don't come with 0.14 out of the box, so we // require them here through this node module. The bummer is that we are not able // to list this as a dependency in package.json and have 0.13 work properly. // As a result, right now this is basically an implicit dependency. try { try { // This is for react v15.5 and up... // eslint-disable-next-line import/no-extraneous-dependencies TestUtils = require('react-dom/test-utils'); // eslint-disable-next-line import/no-extraneous-dependencies shallowRendererFactory = require('react-test-renderer/shallow').createRenderer; } catch (e) { // This is for react < v15.5. Note that users who have `react^15.4.x` in their package.json // will arrive here, too. They need to upgrade. React will print a nice warning letting // them know they need to upgrade, though, so we're good. Also note we explicitly do not // use TestUtils from react-dom/test-utils here, mainly so the user still gets a warning for // requiring 'react-addons-test-utils', which lets them know there's action required. // eslint-disable-next-line import/no-extraneous-dependencies TestUtils = require('react-addons-test-utils'); shallowRendererFactory = TestUtils.createRenderer; } } catch (e) { if (_version.REACT155) { throw new Error('react-dom@15.5+ and react-test-renderer are implicit dependencies when using ' + 'react@15.5+ with enzyme. Please add the appropriate version to your ' + 'devDependencies. See https://github.com/airbnb/enzyme#installation'); } else { throw new Error('react-addons-test-utils is an implicit dependency in order to support react@0.13-14. ' + 'Please add the appropriate version to your devDependencies. ' + 'See https://github.com/airbnb/enzyme#installation'); } } // Shallow rendering changed from 0.13 => 0.14 in such a way that // 0.14 now does not allow shallow rendering of native DOM elements. // This is mainly because the result of such a call should not realistically // be any different than the JSX you passed in (result of `React.createElement`. // In order to maintain the same behavior across versions, this function // is essentially a replacement for `TestUtils.createRenderer` that doesn't use // shallow rendering when it's just a DOM element. exports.createShallowRenderer = createShallowRenderer = function () { function createRendererCompatible() { var renderer = shallowRendererFactory(); var originalRender = renderer.render; var originalRenderOutput = renderer.getRenderOutput; var isDOM = false; var cachedNode = void 0; return (0, _object2['default'])(renderer, { render: function () { function render(node, context) { /* eslint consistent-return: 0 */ if (typeof node.type === 'string') { isDOM = true; cachedNode = node; } else { isDOM = false; return originalRender.call(this, node, context); } } return render; }(), getRenderOutput: function () { function getRenderOutput() { if (isDOM) { return cachedNode; } return originalRenderOutput.call(this); } return getRenderOutput; }() }); } return createRendererCompatible; }(); exports.renderIntoDocument = renderIntoDocument = TestUtils.renderIntoDocument; exports.childrenToArray = childrenToArray = React.Children.toArray; exports.renderWithOptions = renderWithOptions = function () { function renderWithOptions(node, options) { if (options.attachTo) { return ReactDOM.render(node, options.attachTo); } return TestUtils.renderIntoDocument(node); } return renderWithOptions; }(); } function isDOMComponentElement(inst) { return React.isValidElement(inst) && typeof inst.type === 'string'; } var _TestUtils = TestUtils, mockComponent = _TestUtils.mockComponent, isElement = _TestUtils.isElement, isElementOfType = _TestUtils.isElementOfType, isDOMComponent = _TestUtils.isDOMComponent, isCompositeComponent = _TestUtils.isCompositeComponent, isCompositeComponentWithType = _TestUtils.isCompositeComponentWithType, isCompositeComponentElement = _TestUtils.isCompositeComponentElement, Simulate = _TestUtils.Simulate, findAllInRenderedTree = _TestUtils.findAllInRenderedTree; exports.createShallowRenderer = createShallowRenderer; exports.renderToStaticMarkup = renderToStaticMarkup; exports.renderIntoDocument = renderIntoDocument; exports.mockComponent = mockComponent; exports.isElement = isElement; exports.isElementOfType = isElementOfType; exports.isDOMComponent = isDOMComponent; exports.isDOMComponentElement = isDOMComponentElement; exports.isCompositeComponent = isCompositeComponent; exports.isCompositeComponentWithType = isCompositeComponentWithType; exports.isCompositeComponentElement = isCompositeComponentElement; exports.Simulate = Simulate; exports.findDOMNode = findDOMNode; exports.findAllInRenderedTree = findAllInRenderedTree; exports.childrenToArray = childrenToArray; exports.renderWithOptions = renderWithOptions; exports.unmountComponentAtNode = unmountComponentAtNode; exports.batchedUpdates = batchedUpdates;