@helpscout/cyan
Version:
Cypress-like Testing for React + JSDOM
124 lines (84 loc) • 3.79 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var React = _interopRequireWildcard(require("react"));
var _reactDom = _interopRequireDefault(require("react-dom"));
var _cyan = _interopRequireDefault(require("../cyan"));
var _cleanUp2 = _interopRequireDefault(require("../cleanUp"));
var _domCleanUp = _interopRequireDefault(require("../domCleanUp"));
var _timers = require("../timers");
var _wrapWithProvider = _interopRequireDefault(require("./wrapWithProvider"));
var _render = require("../utils/render.utils");
var _is = require("../utils/is.utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
var RenderWrapper =
/*#__PURE__*/
function (_Cyan) {
_inheritsLoose(RenderWrapper, _Cyan);
function RenderWrapper(Component) {
var _this = _Cyan.call(this) || this;
_this.setComponent(Component);
_this.mount(Component); // .get() method comes from Cyan
// @ts-ignore
_this.get(_this.root.children[0]);
return _assertThisInitialized(_assertThisInitialized(_this)) || _assertThisInitialized(_this);
}
var _proto = RenderWrapper.prototype;
_proto.setRootNode = function setRootNode() {
this.cleanUp(); // Create the root node for ReactDOM to mount to
this.root = (0, _render.createRootNode)();
document.body.appendChild(this.root);
};
_proto.setComponent = function setComponent(Component) {
this.Component = Component && Component.type ? React.createElement(Component.type, null) : null;
this.initialProps = Component && Component.props ? Component.props : {};
};
_proto.mount = function mount(Component) {
if (Component === void 0) {
Component = this.Component;
}
this.setComponent(Component);
this.setRootNode(); // Render the WrappedComponent into the root node
this.WrappedComponent = (0, _wrapWithProvider.default)(this.Component);
(0, _timers.runAllTimers)();
this.render(this.initialProps);
return this;
};
_proto.setProps = function setProps(props) {
if (props === void 0) {
props = this.initialProps;
}
this.render(props);
return this;
};
_proto.setProp = function setProp(prop, value) {
var _this$setProps;
if (!(0, _is.isDefined)(prop)) {
return this;
}
this.setProps((_this$setProps = {}, _this$setProps[prop] = value, _this$setProps));
return this;
};
_proto.cleanUp = function cleanUp() {
(0, _cleanUp2.default)();
(0, _domCleanUp.default)();
return this;
};
_proto.unmount = function unmount() {
this.cleanUp();
return this;
};
_proto.render = function render(props) {
var Component = this.WrappedComponent;
_reactDom.default.render(React.createElement(Component, props), this.root);
return this;
};
return RenderWrapper;
}(_cyan.default);
var _default = RenderWrapper;
exports.default = _default;