fireEvent.Click не направляет меня на другую страницу

#reactjs #testing #jestjs #react-testing-library

#reactjs #тестирование #jestjs #реагировать-тестирование-библиотека

Вопрос:

Я пытался вызвать событие щелчка, которое в моем навигационном компоненте я проверил, что кнопка срабатывает, но меня не перенаправляют на другую страницу. Вместо этого мой терминал отправляет мне снимок компонента, который я тестирую, и не может найти текст для входа в тег h1. Также вместо этого попытался запустить ссылку, предоставив ей data-testid, который также не сработал и вернул мне те же результаты.

Пожалуйста, любые рекомендации, заранее спасибо.

тест

 import * as React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { BrowserRouter } from 'react-router-dom';
import '@testing-library/jest-dom';

import Navigation from './Navigation';

describe('Navigation Content',  () => {
    test('clicking login button', () => {
      const props = jest.fn();
      const { getByTestId, getByText } = render (
        <Navigation popUpHandler={props}/>, { wrapper: BrowserRouter }
      );
      
      const loginBtn = getByText('LOGIN');
      fireEvent.click(loginBtn);

      expect(getByText('Login')).not.toBeNull();
      expect(getByText('Login')).toBeInTheDocument();
    })
})

  

Компонент, который я тестирую

 function Navigation(props) {
  const { popUpHandler } = props;

  return (
    <nav className="header__nav">
      <Link data-testid="login-btn" to="/login">
        <button type="button" className="header__login" onClick={() => {console.log('click')}}>LOGIN</button>
      </Link>
      <Link to="/register">
        <button type="button" className="header__register">SIGN UP</button>
      </Link>
      <Link to="/about-me">
        <button type="button" className="header__aboutme">ABOUT ME</button>
      </Link>
      <button type="button" data-testid="close-nav-btn" className="close__nav" onClick {popUpHandler}></button>
    </nav>
  );
}

Navigation.propTypes = {
  popUpHandler: Proptypes.func.isRequired,
};

export default Navigation;
  

Пытаюсь перенаправить на этот компонент для доступа к h1

 function LoginForm() {

  return (
    <div className="login">
        <h1 className="entryheader__header">Login</h1>
    </div>
  )
export default LoginForm;
  

Комментарии:

1. Как вы пытаетесь перенаправить?? Используете ли вы маршруты?

2. не будет ли fireEvent просто нажимать кнопку и автоматически направлять на основе ссылки в моем навигационном компоненте?

3. Я так не думаю. просто указать путь внутри <link/> перенаправит. У вас есть перенаправление с использованием props.history. Или вы можете использовать href

4. Правильно, и это нормально, но не тестируйте сторонний код, т. Е. Не тестируйте функциональность языка javascript, не тестируйте функциональность react, не тестируйте функции / компоненты react-router-dom и т. Д… вы хотите протестировать поведение и логику своего кода.

5. Основная цель RTL — протестировать ваш пользовательский интерфейс так же, как пользователи или другие части вашего приложения взаимодействуют с ним, то есть через props и визуализированный пользовательский интерфейс. Одни только навигационные ссылки мало что дают для проверки, кроме базового тестового примера «рендеринг без сбоев». Если вы создаете достаточно кода «пользовательского интерфейса», чтобы щелкнуть ссылку и перейти в другое место, что ж, теперь вы больше не проводите «модульное» тестирование и посягаете на интеграционное тестирование, то есть на то, как части приложения на самом деле работают вместе. Как я уже сказал, из того, что я могу сказать, не так много чего нужно проверять.