import React from 'react' import { render, screen, fireEvent, cleanup, act } from '@testing-library/react' import { SwipeableCard } from './index' // index.test.tsx jest.mock('./styles.module.css', () => ({ __esModule: true, default: { swipeWrapper: 'swipeWrapper', shake: 'shake', hiddenActions: 'hiddenActions', frontContent: 'frontContent', }, })) const getEls = (container: HTMLElement) => { const wrapper = container.querySelector('.swipeWrapper') as HTMLElement const front = container.querySelector('.frontContent') as HTMLElement const hidden = container.querySelector('.hiddenActions') as HTMLElement return { wrapper, front, hidden } } const swipe = (el: HTMLElement, fromX: number, toX: number) => { fireEvent.pointerDown(el, { clientX: fromX }) fireEvent.pointerMove(el, { clientX: toX }) } describe('SwipeableCard', () => { beforeEach(() => { jest.useFakeTimers() }) afterEach(() => { cleanup() jest.runOnlyPendingTimers() jest.useRealTimers() }) it('renders children and rightActions', () => { render( Del}>
Item
) expect(screen.getByTestId('content')).toBeInTheDocument() expect(screen.getByRole('button', { name: /del/i })).toBeInTheDocument() }) it('stays closed when swiped less than half width', () => { const { container } = render(
Item
) const { wrapper, front } = getEls(container) swipe(wrapper, 200, 160) // 40px < 50px (half of default 100) fireEvent.pointerUp(wrapper) expect(front.style.transform).toContain('translateX(0px)') }) })