react-notifications-component
react-notifications-component copied to clipboard
The component's test for closing by timeout failed
import {act, render, screen} from '@testing-library/react' import {ReactNotifications, Store} from "react-notifications-component";
jest.useFakeTimers(); describe('notification types hide after 2 second', () => { test('should hide info', async () => { render(<ReactNotifications/>) act(() => { Store.addNotification({ type: 'info', message: 'notification info', container: "bottom-right", dismiss: { duration: 2000 } }) }) const notificationBefore = await screen.findByText('notification info') expect(notificationBefore).toBeInTheDocument() act(() => { jest.advanceTimersByTime(3000) }) const notificationAfter = await screen.findByText('notification info') expect(notificationAfter).not.toBeInTheDocument() }) }) jest.clearAllTimers()
The notification is not removed from the DOM even if you try to apply the method Store.removeAllNotifications(). Maybe I'm doing something wrong?
can you post a CodeSandbox example that illustrates this? I know testing async stuff with timers it's not the most straightforward thing in Jest.
I'm not sure how advanceTimersByTime work and if it's actually reliable to use those, where I work I use this
render(<Component />);
await waitFor(
() => {
expect(loadUserMock).toHaveBeenCalled();
},
{ timeout: 6000 }
);
It seems you're not using waitFor.
See if that helps maybe?