UNPKG

zarm

Version:

基于 React 的移动端UI库

243 lines (214 loc) 8.66 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); require("@testing-library/jest-dom"); var _react = require("@testing-library/react"); var _react2 = _interopRequireDefault(require("react")); var _ = _interopRequireDefault(require("..")); var _images = require("../../../tests/testData/images"); var _utils = require("../../../tests/utils"); var _button = _interopRequireDefault(require("../../button")); var originalOffsetWidth = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'offsetWidth'); var originalOffsetHeight = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'offsetHeight'); describe('ImagePreview', function () { var onloadRef; beforeAll(function () { Object.defineProperty(Image.prototype, 'onload', { get: function get() { return this._onload; }, set: function set(onload) { onloadRef = onload; this._onload = onload; } }); }); afterEach(function () { jest.restoreAllMocks(); jest.useRealTimers(); }); describe('snapshot', function () { it('renders correctly', function () { var wrapper = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { visible: true, onChange: jest.fn(), images: _images.images, mountContainer: false })); expect(wrapper.asFragment()).toMatchSnapshot(); }); it('renders correctly with origin', function () { var wrapper = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { visible: true, onChange: jest.fn(), images: _images.originImages, mountContainer: false })); expect(wrapper.asFragment()).toMatchSnapshot(); }); }); it('should render show origin url button if origin url is not existed', function () { var _render = (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { images: _images.images, visible: true })), container = _render.container; var buttonWrapper = container.querySelectorAll('.za-image-preview button'); expect(buttonWrapper).toHaveLength(0); }); it('should not call onClose handler when touch end and the duration between touchstart and touchend greater than 300ms', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { var mOnClose, contentWrapper; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: mOnClose = jest.fn(); (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { visible: true, images: _images.images, onClose: mOnClose })); contentWrapper = document.body.getElementsByClassName('za-image-preview__content')[0]; _react.fireEvent.mouseDown(contentWrapper); _react.fireEvent.mouseMove(contentWrapper); _context.next = 7; return (0, _utils.sleep)(500); case 7: _react.fireEvent.mouseUp(contentWrapper); expect(mOnClose).not.toBeCalled(); case 9: case "end": return _context.stop(); } } }, _callee); }))); beforeEach(function () { Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { configurable: true, value: 375 }); Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { configurable: true, value: 200 }); }); afterAll(function () { Object.defineProperty(HTMLElement.prototype, 'offsetHeight', originalOffsetWidth); Object.defineProperty(HTMLElement.prototype, 'offsetHeight', originalOffsetHeight); }); it('onChange', function () { var onChange = jest.fn(); (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { visible: true, images: _images.images, onChange: onChange })); var element = document.body.querySelector('.za-carousel'); _react.fireEvent.mouseDown(element, { pointerId: 1, clientX: 0, clientY: 0, buttons: 1 }); _react.fireEvent.mouseMove(element, { pointerId: 1, clientX: -200, clientY: 0, buttons: 1 }); _react.fireEvent.mouseUp(element, { pointerId: 1, clientX: -275 }); expect(onChange).toBeCalledTimes(1); }); // it('onClose', async () => { // const mOnClose = jest.fn(); // render(<ImagePreview visible images={images} onClose={mOnClose} />); // const content = document.body.querySelector('.za-image-preview__content'); // fireEvent.mouseDown(content!, { pointerId: 10, clientX: 20, clientY: 0, buttons: 1 }); // fireEvent.mouseMove(content!, { pointerId: 10, clientX: 20, clientY: 0, buttons: 1 }); // fireEvent.mouseUp(content!, { pointerId: 10, clientX: 20 }); // expect(mOnClose).toBeCalledTimes(1); // }); // it('load origin', async () => { // const { getByText } = render(<ImagePreview visible images={originImages} className="test1" />); // const content = getByText('查看原图'); // const newContent = document.body.querySelector('.test1 button'); // fireEvent.mouseDown(content!, { pointerId: 10, clientX: 20, clientY: 0, buttons: 1 }); // fireEvent.mouseMove(content!, { pointerId: 10, clientX: 20, clientY: 0, buttons: 1 }); // fireEvent.mouseUp(content!, { pointerId: 10, clientX: 20 }); // expect(newContent).not.toBeInTheDocument(); // }); it('should render pagination', function () { (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { visible: true, images: _images.images })); var paginationWrapper = document.body.getElementsByClassName('za-image-preview__pagination'); expect(paginationWrapper).toHaveLength(1); expect(paginationWrapper[0].textContent).toContain('1 / 3'); }); it('should not render pagination', function () { (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { visible: true, images: _images.images, showPagination: false })); expect(document.body.getElementsByClassName('za-image-preview__pagination')).toHaveLength(0); }); it('should render images', function () { (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_.default, { visible: true, images: _images.images })); var img = document.body.querySelectorAll('img'); expect(img).toHaveLength(3); var srcArr = Array.from(img).map(function (v) { return v.getAttribute('src'); }); expect(srcArr).toEqual(_images.images); }); it('show', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() { var onClick, button; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: onClick = /*#__PURE__*/function () { var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() { return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return _.default.show({ images: _images.images, className: 'image-static' }); case 2: case "end": return _context2.stop(); } } }, _callee2); })); return function onClick() { return _ref3.apply(this, arguments); }; }(); (0, _react.render)( /*#__PURE__*/_react2.default.createElement(_button.default, { onClick: onClick }, "show")); button = _react.screen.getByText('show'); _react.fireEvent.click(button); expect(document.body.getElementsByClassName('image-static')[0]).toBeInTheDocument(); case 5: case "end": return _context3.stop(); } } }, _callee3); }))); });