react-notifications-component icon indicating copy to clipboard operation
react-notifications-component copied to clipboard

The component's test for closing by timeout failed

Open Smistav opened this issue 2 years ago • 1 comments

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?

Smistav avatar Dec 26 '22 07:12 Smistav

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?

teodosii avatar Feb 04 '23 19:02 teodosii