UNPKG

zarm

Version:

基于 React 的移动端UI库

239 lines (196 loc) 8.18 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); require("@testing-library/jest-dom"); var _react2 = require("@testing-library/react"); var _index = _interopRequireDefault(require("../index")); var _list = _interopRequireDefault(require("../../list")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) { if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } } return n.default = e, t && t.set(e, n), n; } var REFRESH_STATE = { normal: 0, // 普通 pull: 1, // 下拉刷新(未满足刷新条件) drop: 2, // 释放立即刷新(满足刷新条件) loading: 3, // 加载中 success: 4, // 加载成功 failure: 5 // 加载失败 }; var LOAD_STATE = { normal: 0, // 普通 abort: 1, // 中止 loading: 2, // 加载中 success: 3, // 加载成功 failure: 4, // 加载失败 complete: 5 // 加载完成(无新数据) }; var getRandomNum = function getRandomNum(min, max) { var Range = max - min; var Rand = Math.random(); return min + Math.round(Rand * Range); }; var fetchData = function fetchData(length, dataSource) { var newData = dataSource; var startIndex = newData.length; for (var i = startIndex; i < startIndex + length; i++) { newData.push( /*#__PURE__*/_react.default.createElement(_list.default.Item, { key: +i, title: "\u7B2C ".concat(i + 1, " \u884C") })); } return newData; }; describe('Pull', function () { var App = function App() { var _React$useState = _react.default.useState([]), _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2), dataSource = _React$useState2[0], setDataSource = _React$useState2[1]; var _React$useState3 = _react.default.useState(REFRESH_STATE.normal), _React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2), refreshing = _React$useState4[0], setRefreshing = _React$useState4[1]; var _React$useState5 = _react.default.useState(LOAD_STATE.normal), _React$useState6 = (0, _slicedToArray2.default)(_React$useState5, 2), loading = _React$useState6[0], setLoading = _React$useState6[1]; var count = (0, _react.useRef)(0); var refreshData = function refreshData() { setRefreshing(REFRESH_STATE.loading); setTimeout(function () { if (count.current > 0) { setRefreshing(REFRESH_STATE.failure); return; } setDataSource(fetchData(20, [])); setRefreshing(REFRESH_STATE.success); count.current += 1; }, 2000); // setDataSource(fetchData(20, [])); // setRefreshing(REFRESH_STATE.success); }; // 模拟加载更多数据 var loadData = function loadData() { setLoading(LOAD_STATE.loading); setTimeout(function () { setDataSource(fetchData(20, [])); setLoading(LOAD_STATE.complete); }, 2000); }; _react.default.useEffect(function () { setDataSource(fetchData(20, [])); }, []); return /*#__PURE__*/_react.default.createElement(_index.default, { refresh: { state: refreshing, handler: refreshData }, load: { state: loading, distance: 200, handler: loadData } }, /*#__PURE__*/_react.default.createElement(_list.default, null, dataSource)); }; it('renders correctly', function () { var _render = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.default, null, /*#__PURE__*/_react.default.createElement("div", null, "1"), /*#__PURE__*/_react.default.createElement("div", null, "2"), /*#__PURE__*/_react.default.createElement("div", null, "3"))), container = _render.container; expect(container).toMatchSnapshot(); }); it('refreshing', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { var _render2, container, getByText, pull; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: jest.useFakeTimers(); _render2 = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(App, null)), container = _render2.container, getByText = _render2.getByText; pull = container.querySelector('.za-pull'); _react2.fireEvent.mouseDown(pull, { pointerId: 15, clientX: 100, clientY: 0, buttons: 1 }); _react2.fireEvent.mouseMove(pull, { pointerId: 15, clientX: 100, clientY: 100, buttons: 1 }); _react2.fireEvent.mouseMove(pull, { pointerId: 15, clientX: 150, clientY: 300, buttons: 1 }); _react2.fireEvent.mouseUp(pull, { pointerId: 15 }); (0, _react2.act)(function () { jest.runAllTimers(); }); _context.next = 10; return (0, _react2.waitFor)(function () { expect(getByText('加载成功')).toBeInTheDocument(); }); case 10: case "end": return _context.stop(); } } }, _callee); }))); it('loading', /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() { var scrollToSpy, clientHeightSpy, scrollHeightSpy, _render3, getByText; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: jest.useFakeTimers(); scrollToSpy = jest.spyOn(window, 'scrollTo').mockImplementation(function (_, y) { window.scrollY = y; window.pageYOffset = y; document.documentElement.scrollTop = y; }); clientHeightSpy = jest.spyOn(document.documentElement, 'clientHeight', 'get').mockImplementation(function () { return 100; }); scrollHeightSpy = jest.spyOn(document.body, 'clientHeight', 'get').mockImplementation(function () { return 1000; }); _render3 = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(App, null)), getByText = _render3.getByText; window.scrollTo(0, 800); _react2.fireEvent.scroll(window, { scrollY: -100 }); (0, _react2.act)(function () { jest.runOnlyPendingTimers(); }); _context2.next = 10; return (0, _react2.waitFor)(function () { expect(getByText('我是有底线的')).toBeInTheDocument(); }); case 10: scrollToSpy.mockRestore(); scrollHeightSpy.mockRestore(); clientHeightSpy.mockRestore(); case 13: case "end": return _context2.stop(); } } }, _callee2); }))); });