1. 기본으로 탑재된 cleanup 동작으로 인해 각 test 함수 전에 모두 unmount됨
  2. beforeEach를 넣어서 각 테스트전에 원하는 컴포넌트를 렌더링 해줌
  3. 이벤트 리스너들은 없어지지 않음
    1. 컴포넌트가 unmount되어도 메모리상에 남아있어서 그 컴포넌트의 리스너들은 동작함
    2. 리스터를 removeAllListeners 로 제거하는 동작을 beforeEach에 넣어줌
  4. 테스트는 screen 오브젝트를 사용하면 됨. (unmount된 컴포넌트는 인식하지 않음)

example

beforeEach(() => {
  rendererEmt.removeAllListeners();
  render(<MainScreen />);
});

describe('App bar', () => {
  test('Exist AppBar', () => {
    expect(screen.getByTestId('AppBar')).toBeTruthy();
  });
});

describe('Spinner', () => {
  test('Show spinner', async () => {
    act(() => {
      rendererEmt.emit('set-spinner', true);
    });
    expect(screen.getByTestId('spinner')).toBeInTheDocument();
  });

  test('hide spinner', async () => {
    act(() => {
      rendererEmt.emit('set-spinner', false);
    });
    await waitFor(() =>
      expect(screen.queryByTestId('spinner')).not.toBeInTheDocument()
    );
  });
});