/** * @jest-environment jsdom */ import React from 'react'; import { render, screen, fireEvent } from '@testing-library/react'; import '@testing-library/jest-dom/extend-expect'; import Avatar, { avatarFailback } from '../../src/components/Avatar'; describe('Avatar', () => { it('shoule render without error', async () => { render(); const $img = await screen.findByRole('img'); expect($img).toBeInTheDocument(); }); it('should call props handler function when fire event', async () => { const handleClick = jest.fn(); const handleMouseEnter = jest.fn(); const handleMouseLeave = jest.fn(); render( , ); const $img = await screen.findByRole('img'); fireEvent.click($img); expect(handleClick).toBeCalled(); fireEvent.mouseEnter($img); expect(handleMouseEnter).toBeCalled(); fireEvent.mouseLeave($img); expect(handleMouseLeave).toBeCalled(); }); it('shoule use failback avatar when fetch error', async () => { const src = 'origin.jpg'; render(); const $img = (await screen.findByRole('img')) as HTMLImageElement; expect($img.src).toEqual(expect.stringContaining(src)); fireEvent.error($img); expect($img.src).toEqual(expect.stringContaining(avatarFailback)); fireEvent.error($img); fireEvent.error($img); }); it('shoule not add CDN query params', async () => { const src = 'data:base64/png;xxx'; render(); const $img = (await screen.findByRole('img')) as HTMLImageElement; expect($img.src).not.toEqual(expect.stringContaining('x-oss-process=')); }); });