UNPKG

@cainiaofe/cn-ui-m

Version:
94 lines (93 loc) 3.25 kB
import { __assign, __awaiter, __generator, __rest } from "tslib"; import '@testing-library/jest-dom'; import { act, fireEvent, render, } from '@testing-library/react'; import { axe, toHaveNoViolations } from 'jest-axe'; import * as React from 'react'; expect.extend(toHaveNoViolations); var AllTheProviders = function (_a) { var children = _a.children; /** * TODO: 在这里添加 Provider 如 * import { ThemeProvider } from 'my-ui-lib' * import { TranslationProvider } from 'my-i18n-lib' * import defaultStrings from 'i18n/en-x-default' * * return ( * <ThemeProvider theme="light"> * <TranslationProvider messages={defaultStrings}> * {children} * </TranslationProvider> * </ThemeProvider> * ) */ return children; }; /** * Custom render for @testing-library/react * * @see https://testing-library.com/docs/react-testing-library/setup#custom-render * @param component the component under test * @param options customized test options */ export var customRender = function (ui, _a) { if (_a === void 0) { _a = {}; } var _b = _a.wrapper, Wrapper = _b === void 0 ? AllTheProviders : _b, options = __rest(_a, ["wrapper"]); return render(React.createElement(Wrapper, null, ui), options); }; // re-export everything export * from '@testing-library/react'; export { default as userEvent } from '@testing-library/user-event'; // override render method export { customRender as render }; /** * Validates against common a11y mistakes. * * Wrapper for jest-axe * * @example * ```jsx * it('passes a11y test', async () => { * await testA11Y(<MyComponent />, options); * }); * * // sometimes we need to perform interactions first to render conditional UI * it('passes a11y test when open', async () => { * const { container } = render(<MyComponent />, options); * * fireEvent.click(screen.getByRole('button')); * * await testA11Y(container, options); * }); * ``` * * @see https://github.com/nickcolley/jest-axe#testing-react-with-react-testing-library */ export var testA11y = function (ui) { return __awaiter(void 0, void 0, void 0, function () { var container, results; return __generator(this, function (_a) { switch (_a.label) { case 0: container = React.isValidElement(ui) ? customRender(ui).container : ui; return [4 /*yield*/, axe(container)]; case 1: results = _a.sent(); expect(results).toHaveNoViolations(); return [2 /*return*/]; } }); }); }; export var sleep = function (time) { return new Promise(function (resolve) { return setTimeout(resolve, time); }); }; export var actSleep = function (time) { return act(function () { return sleep(time); }); }; export var mockDrag = function (el, options) { var downOptions = options[0], moveOptions = options.slice(1); fireEvent.mouseDown(el, __assign({ buttons: 1 }, downOptions)); for (var _i = 0, moveOptions_1 = moveOptions; _i < moveOptions_1.length; _i++) { var item = moveOptions_1[_i]; fireEvent.mouseMove(el, __assign({ buttons: 1 }, item)); } fireEvent.mouseUp(el); };