UNPKG

react-testing-library

Version:

Simple and complete React DOM testing utilities that encourage good testing practices.

92 lines (75 loc) 3.31 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.cleanup = exports.render = undefined; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _domTestingLibrary = require('dom-testing-library'); Object.keys(_domTestingLibrary).forEach(function (key) { if (key === "default" || key === "__esModule") return; Object.defineProperty(exports, key, { enumerable: true, get: function get() { return _domTestingLibrary[key]; } }); }); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _testUtils = require('react-dom/test-utils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var mountedContainers = new Set(); function render(ui) { var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, container = _ref.container, _ref$baseElement = _ref.baseElement, baseElement = _ref$baseElement === undefined ? container : _ref$baseElement; if (!container) { baseElement = document.documentElement; container = document.body.appendChild(document.createElement('div')); } // we'll add it to the mounted containers regardless of whether it's actually // added to document.body so the cleanup method works regardless of whether // they're passing us a custom container or not. mountedContainers.add(container); _reactDom2.default.render(ui, container); return _extends({ container, baseElement, // eslint-disable-next-line no-console debug: function debug() { var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : baseElement; return console.log((0, _domTestingLibrary.prettyDOM)(el)); }, unmount: function unmount() { return _reactDom2.default.unmountComponentAtNode(container); }, rerender: function rerender(rerenderUi) { render(rerenderUi, { container, baseElement }); // Intentionally do not return anything to avoid unnecessarily complicating the API. // folks can use all the same utilities we return in the first place that are bound to the container } }, (0, _domTestingLibrary.getQueriesForElement)(baseElement)); } function cleanup() { mountedContainers.forEach(cleanupAtContainer); } // maybe one day we'll expose this (perhaps even as a utility returned by render). // but let's wait until someone asks for it. function cleanupAtContainer(container) { if (container.parentNode === document.body) { document.body.removeChild(container); } _reactDom2.default.unmountComponentAtNode(container); mountedContainers.delete(container); } // fallback to synthetic events for React events that the DOM doesn't support var syntheticEvents = ['change', 'select', 'mouseEnter', 'mouseLeave']; syntheticEvents.forEach(function (eventName) { document.addEventListener(eventName.toLowerCase(), function (e) { _testUtils.Simulate[eventName](e.target, e); }); }); // just re-export everything from dom-testing-library exports.render = render; exports.cleanup = cleanup;