From bdf0419b7b7668e7b07d7c4dbcd37d9bc4ad138e Mon Sep 17 00:00:00 2001 From: RedrockJS Date: Tue, 11 Mar 2025 15:51:10 +0300 Subject: [PATCH] update test --- docs/testing/02-fronend-test.md | 342 ++++++++++++++++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 docs/testing/02-fronend-test.md diff --git a/docs/testing/02-fronend-test.md b/docs/testing/02-fronend-test.md new file mode 100644 index 0000000..6208c05 --- /dev/null +++ b/docs/testing/02-fronend-test.md @@ -0,0 +1,342 @@ +--- +sidebar_position: 2 +--- + + +# Типы тестов в приложениях React +Источник: [https://open.zeba.academy/testirovanie-prilozheniy-react-luchshie-praktiki-instrumenty/](https://open.zeba.academy/testirovanie-prilozheniy-react-luchshie-praktiki-instrumenty/) +Тестирование в приложениях React можно разделить на три основных типа: **модульные тесты**, **интеграционные тесты** и **комплексные (E2E) тесты**. Модульные тесты фокусируются на отдельных компонентах, обеспечивая их корректную работу в изоляции, проверяя такие аспекты, как рендеринг, изменения состояния и обработка событий. Интеграционные тесты проверяют, как компоненты взаимодействуют друг с другом, проверяя поток данных и взаимодействие между различными частями приложения. С другой стороны, тесты E2E моделируют реальные пользовательские сценарии для тестирования всего стека приложений, от пользовательского интерфейса до внутренних служб, гарантируя, что приложение работает так, как задумано с точки зрения пользователя. Каждый тип тестирования играет решающую роль в поддержании надежности приложений React. + +## Модульное тестирование +Модульное тестирование включает в себя проверку отдельных компонентов или блоков кода, чтобы убедиться, что они корректно функционируют изолированно. Основная цель – проверить, что каждый компонент работает должным образом в различных условиях. В React модульные тесты обычно фокусируются на тестировании отдельных компонентов и их логики без привлечения внешних зависимостей. + +### Что тестировать в компонентах React +При модульном тестировании компонентов React учитывайте следующие аспекты: +- **Рендеринг компонентов:** Убедитесь, что компонент корректно отрисовывается с использованием различных реквизитов. +- **Обработка событий:** Проверьте, работают ли обработчики событий (например, onClick, onChange) должным образом. +- **Изменения состояния:** Убедитесь, что переходы между состояниями происходят корректно в зависимости от взаимодействия с пользователем или изменений в prop. +- **Вывод:** Проверьте корректность вывода компонента (например, отображаемого HTML-кода). + +### Примеры модульных тестов в React + +Рассмотрим простой компонент React, кнопку, которая меняет свою метку при нажатии: +```jsx +// Button.js +import React, { useState } from 'react'; + +function Button() { + const [label, setLabel] = useState('Click me'); + + return ( + + ); +} + +export default Button; +``` + +Модульный тест для этого компонента с использованием библиотеки тестирования Jest и React может выглядеть следующим образом: +```jsx +// Button.test.js +import { render, fireEvent } from '@testing-library/react'; +import Button from './Button'; + +test('Button changes label when clicked', () => { +const { getByText } = render( + + ); +} + +export default LoginPage; +``` + +Тест E2E с использованием Cypress может выглядеть следующим образом: +```jsx +// login.spec.js +describe('Login Flow', () => { + it('allows a user to log in', () => { + cy.visit('/login'); + + cy.get('input[placeholder="Username"]').type('testuser'); + cy.get('input[placeholder="Password"]').type('password123'); + cy.get('button').contains('Login').click(); + + // Assert the expected behavior after login + cy.url().should('include', '/dashboard'); + cy.contains('Welcome, testuser').should('be.visible'); + }); +}); +``` +Понимание различных типов тестов — модульных, интеграционных и сквозных — имеет решающее значение для обеспечения надежности приложений React. Модульные тесты фокусируются на отдельных компонентах, интеграционные тесты проверяют взаимодействие между компонентами, а тесты E2E моделируют реальные пользовательские сценарии для тестирования всего стека приложений. + +## Рекомендации по тестированию приложений React +Тестирование имеет решающее значение для поддержания качества и надежности приложений React. Соблюдение рекомендаций гарантирует эффективность и ремонтопригодность тестов. Здесь мы расскажем о нескольких ключевых рекомендациях по тестированию приложений React. + +### Прежде чем исправлять ошибки, напишите тесты +Написание тестов перед исправлением ошибок гарантирует, что ошибка будет хорошо понята и что исправление действительно решит проблему. Эта практика, известная как регрессионное тестирование, помогает предотвратить повторение одной и той же ошибки. Например, если предполагается, что кнопка обновляет состояние, но не может этого сделать, написание теста на ожидаемое поведение перед его исправлением гарантирует, что решение будет проверено. +```jsx +// Example of a regression test +test('button updates state when clicked', () => { + const { getByText } = render(