App.spec.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React from 'react';
  2. import { screen, within } from '@testing-library/react';
  3. import App from 'components/App';
  4. import { render } from 'lib/testHelpers';
  5. import userEvent from '@testing-library/user-event';
  6. const burgerButtonOptions = { name: 'burger' };
  7. const logoutButtonOptions = { name: 'Log out' };
  8. jest.mock('components/Nav/Nav', () => () => <div>Navigation</div>);
  9. describe('App', () => {
  10. beforeEach(() => {
  11. render(<App />, {
  12. initialEntries: ['/'],
  13. });
  14. });
  15. it('correctly renders header', () => {
  16. const header = screen.getByLabelText('Page Header');
  17. expect(header).toBeInTheDocument();
  18. expect(within(header).getByText('UI for Apache Kafka')).toBeInTheDocument();
  19. expect(within(header).getAllByRole('separator').length).toEqual(3);
  20. expect(
  21. within(header).getByRole('button', burgerButtonOptions)
  22. ).toBeInTheDocument();
  23. expect(
  24. within(header).getByRole('button', logoutButtonOptions)
  25. ).toBeInTheDocument();
  26. });
  27. it('handle burger click correctly', () => {
  28. const burger = within(screen.getByLabelText('Page Header')).getByRole(
  29. 'button',
  30. burgerButtonOptions
  31. );
  32. const overlay = screen.getByLabelText('Overlay');
  33. expect(screen.getByLabelText('Sidebar')).toBeInTheDocument();
  34. expect(overlay).toBeInTheDocument();
  35. expect(overlay).toHaveStyleRule('visibility: hidden');
  36. expect(burger).toHaveStyleRule('display: none');
  37. userEvent.click(burger);
  38. expect(overlay).toHaveStyleRule('visibility: visible');
  39. });
  40. it('Renders navigation', async () => {
  41. expect(screen.getByText('Navigation')).toBeInTheDocument();
  42. });
  43. });