#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 и визуализированный пользовательский интерфейс. Одни только навигационные ссылки мало что дают для проверки, кроме базового тестового примера «рендеринг без сбоев». Если вы создаете достаточно кода «пользовательского интерфейса», чтобы щелкнуть ссылку и перейти в другое место, что ж, теперь вы больше не проводите «модульное» тестирование и посягаете на интеграционное тестирование, то есть на то, как части приложения на самом деле работают вместе. Как я уже сказал, из того, что я могу сказать, не так много чего нужно проверять.