@cainiaofe/cn-ui-m
Version:
94 lines (93 loc) • 3.25 kB
JavaScript
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);
};