import { render, screen, waitFor } from '@testing-library/react'; import { describe, it, expect, vi } from 'vitest'; import { createLazyComponent } from './LazyComponent'; import { Suspense } from 'react'; // Mock component const MockComponent = () =>
Lazy Loaded Component
; describe('LazyComponent', () => { it('creates lazy component factory', () => { const LazyTest = createLazyComponent(() => Promise.resolve({ default: MockComponent }), ); expect(LazyTest).toBeDefined(); expect(typeof LazyTest).toBe('function'); }); it('renders lazy component when loaded', async () => { const LazyTest = createLazyComponent(() => Promise.resolve({ default: MockComponent }), ); render( Loading...}> , ); await waitFor(() => { expect(screen.getByText('Lazy Loaded Component')).toBeInTheDocument(); }); }); it('shows fallback while loading', () => { const LazyTest = createLazyComponent( () => new Promise(() => {}), // Never resolves ); render( Loading...}> , ); // WrappedLazyComponent uses LoadingSpinner when no fallback prop; spinner shows "Chargement..." expect(screen.getByText(/Chargement|Loading/)).toBeInTheDocument(); }); it('uses custom fallback when provided', () => { const LazyTest = createLazyComponent( () => new Promise(() => {}),
Custom Loading...
, ); render( Default Loading...}> Custom Loading...} /> , ); // Inner Suspense uses the custom fallback passed to createLazyComponent expect(screen.getByText('Custom Loading...')).toBeInTheDocument(); }); });