import { useState } from 'react'; import { test, expect } from 'vitest'; import { fireEvent, render, screen } from '@testing-library/react'; import useTracking from './useTracking'; const Link = ({ children }: { children: React.ReactNode; }) => {children}; const Links = () => { useTracking(); const [links, setLinks] = useState([]); const addNewLink = () => { setLinks((prev) => [...prev, 'Second link']); }; return ( <> {links.map((link, index) => ( {link} ))} ); }; // basic test to verify the tracking script is having an effect test('text tracking on component render', async () => { const SECTION_ONE_TEXT = 'Foo'; const SECTION_TWO_TEXT = 'Bar'; render( <>

{SECTION_ONE_TEXT}

First link

{SECTION_TWO_TEXT}

); const button = screen.getByRole('button'); const firstLink = screen.getByText('First link'); expect(firstLink).toHaveAttribute('data-section', SECTION_ONE_TEXT); fireEvent( button, new MouseEvent('click', new MouseEvent('click', { bubbles: true, cancelable: true, }) )); const secondLink = await screen.findByText('Second link') expect(secondLink).toHaveAttribute('data-section', SECTION_TWO_TEXT); });