UNPKG

@oskarer/enzyme-wait

Version:

Wait for an async element to appear when performing integration tests with enzyme.

55 lines (42 loc) 1.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWaitForElement = undefined; var _assertionError = require("assertion-error"); var _assertionError2 = _interopRequireDefault(_assertionError); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const DISPLAY_NAME = "waitForElement"; const createWaitForElement = exports.createWaitForElement = function (selector) { let enzymeFunction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "find"; let maxTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2000; let interval = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10; return rootComponent => { // Check correct usage if (!selector) { return Promise.reject(new _assertionError2.default(`No selector specified in ${DISPLAY_NAME}.`)); } if (!rootComponent) { return Promise.reject(new _assertionError2.default(`No root component specified in ${DISPLAY_NAME}.`)); } if (!rootComponent.length) { return Promise.reject(new _assertionError2.default(`Specified root component in ${DISPLAY_NAME} not found.`)); } // Race component search against maxTime return new Promise((resolve, reject) => { let remainingTime = maxTime; const intervalId = setInterval(() => { if (remainingTime < 0) { clearInterval(intervalId); return reject(new _assertionError2.default(`Expected to find ${selector} within ${maxTime}ms, but it was never found.`)); } const targetComponent = rootComponent.update()[enzymeFunction](selector); if (targetComponent.length) { clearInterval(intervalId); return resolve(targetComponent); } remainingTime = remainingTime - interval; }, interval); }); }; };