reshow-unit
Version:
Reshow Unit Test Pack
162 lines (153 loc) • 4.57 kB
JavaScript
import _objectSpread from "reshow-runtime/es/helpers/objectSpread2";
import _asyncToGenerator from "reshow-runtime/es/helpers/asyncToGenerator";
//@ts-check
import * as React from "react";
import { jsdom, cleanIt as domCleanIt, hideConsoleError, getSinon, sleep } from "reshow-unit-dom";
import { doc } from "win-doc";
import { getTimestamp } from "get-random-id";
import { getDefault } from "get-object-value";
import { waitFor, waitForElementToBeRemoved } from "@testing-library/dom";
import { render as rtlRender, cleanup, getQueriesForElement, queries } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { env } from "process";
import build from "reshow-build";
import { StrictMode, act as rtlAct } from "react";
var envStrictMode = /** @type string*/env.STRICT_MODE;
var STRICT_MODE = -1 !== "|true|false|null|0|".indexOf(envStrictMode) ? JSON.parse(envStrictMode) : envStrictMode;
if (STRICT_MODE) {
console.log("STRICT_MODE: on");
}
/**
* Fix!!
* `The current testing environment is not configured to support act(…)`
*
* @see https://github.com/testing-library/react-testing-library/issues/1025
* @see https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html
*/
globalThis.IS_REACT_ACT_ENVIRONMENT = true;
// https://testing-library.com/docs/queries/about/#screen
var screen = function screen() {
var _doc;
return getQueriesForElement((_doc = doc()) === null || _doc === void 0 ? void 0 : _doc.body, queries);
};
/**
* @param {string} role
* @returns {string}
*/
var getRoleHtml = function getRoleHtml(role) {
return screen().getByRole(role).outerHTML;
};
/**
* @param {Object} [props]
*/
var cleanIt = function cleanIt(props) {
var {
withoutJsdom
} = props || {};
if (!withoutJsdom) {
domCleanIt(props);
}
cleanup();
};
/**
* @param {function} cb
*/
var act = /*#__PURE__*/function () {
var _ref = _asyncToGenerator(function* (cb, milliseconds, debug) {
if (cb === void 0) {
cb = function cb() {};
}
if (milliseconds === void 0) {
milliseconds = 1;
}
if (debug === void 0) {
debug = false;
}
var start = getTimestamp();
var timer;
yield rtlAct(function () {
return new Promise(function (resolve) {
cb();
/**
* @param {function} resolve
*/
var _wait = function wait(resolve) {
var now = getTimestamp();
debug && console.log({
during: now - start,
debug,
start,
now
});
if (milliseconds + start > now) {
clearTimeout(timer);
timer = setTimeout(function () {
return _wait(resolve);
}, 1);
} else {
resolve();
}
};
_wait(resolve);
});
});
});
return function act(_x, _x2, _x3) {
return _ref.apply(this, arguments);
};
}();
/**
* @typedef {Object} RenderResult
* @property {function} html
* @property {function} instance
*/
/**
* rtl-render: https://github.com/testing-library/react-testing-library/blob/main/src/pure.js
*
* @param {React.ReactElement} OrigDom
* @param {object} options
* @returns {import("@testing-library/react").RenderResult & RenderResult}
*/
var render = function render(OrigDom, options) {
var _options;
if (options === void 0) {
options = {};
}
var instance = (_options = options) === null || _options === void 0 ? void 0 : _options.instance;
var Dom = OrigDom;
var uInstance;
if (instance) {
if (true === instance) {
/**
* @param {React.ReactElement} el
*/
instance = function instance(el) {
return uInstance = el;
};
}
Dom = /** @type React.ReactElement*/build(OrigDom)({
ref: instance
});
}
if (STRICT_MODE) {
Dom = /** @type React.ReactElement*/build(StrictMode)(undefined, Dom);
}
var result = _objectSpread(_objectSpread({}, rtlRender(Dom, options)), {}, {
html: function html() {
return result.container.innerHTML;
},
instance: function instance() {
return uInstance;
}
});
return result;
};
// https://testing-library.com/docs/user-event/intro
/**
* @param {ConstructorParameters<any>} p
*/
var simulateEvent = function simulateEvent() {
var _getDefault;
return (_getDefault = getDefault(userEvent)).setup.apply(_getDefault, arguments);
};
export { waitFor, waitForElementToBeRemoved, act, render, screen, simulateEvent, sleep, getRoleHtml, getSinon, cleanIt, jsdom, hideConsoleError };