expect
- это функция, предоставляемая библиотеками для тестирования, такими как Jest, для проверки ожидаемых результатов в тестах. Она используется для сравнения фактического значения с ожидаемым значением и выполнения утверждений (assertions).
Пример использования expect
в Jest:
test('два плюс два равно четыре', () => {
expect(2 + 2).toBe(4);
});
В этом примере expect(2 + 2)
возвращает объект, который имеет метод toBe(4)
, который сравнивает результат выражения 2 + 2
с ожидаемым значением 4
.
Логическое разделение множества expect на отдельные it, нужно ли?
Множество expect
// Реализация, когда кладем однотипные проверки в один it блок
test('Переданные параметры должны рендериться внутри компонента', () => {
const { getByText } = render(<InfoModal {...props} />)
expect(getByText('modal')).toBeInTheDocument()
expect(getByText('modal description')).toBeInTheDocument()
expect(getByText('phone number')).toBeInTheDocument()
expect(getByText('phone caption')).toBeInTheDocument()
expect(getByText('button')).toBeInTheDocument()
})
// Реализация, когда разбиваем it блоки внутри группы describe
import { screen } from '@testing-library/dom'
describe('Переданные параметры должны рендериться внутри компонента', () => {
beforeEach(() => {
render(<InfoModal {...props} />)
})
it('Должна открыться модалка', () => {
expect(screen.getByText('modal')).toBeInTheDocument()
})
it('Должно отобразиться описание', () => {
expect(screen.getByText('modal description')).toBeInTheDocument()
})
...
})
Предварительно декомпозируем it блоки.
Почему? Удобно следить за тестами и удалять/рефачить целые блоки it, в случае удаления/изменения UI-компонента.
Декомпозированные it
// Реализация, когда разбиваем it блоки внутри группы describe
import { screen } from '@testing-library/dom'
describe('Переданные параметры должны рендериться внутри компонента', () => {
beforeEach(() => {
render(<InfoModal {...props} />)
})
it('Должна открыться модалка', () => {
expect(screen.getByText('modal')).toBeInTheDocument()
})
it('Должно отобразиться описание', () => {
expect(screen.getByText('modal description')).toBeInTheDocument()
})
...
})
В этом примере каждый it
-блок проверяет отдельное утверждение. Это хорошая практика, так как:
- Четкость: Каждый тест фокусируется на одном конкретном аспекте, что делает код более читаемым.
- Отладка: Если один из тестов не проходит, легче понять, какая именно часть кода не работает.
- Изоляция: Тесты изолированы друг от друга, что уменьшает вероятность того, что ошибка в одном тесте повлияет на другой.
Таким образом, да, я разделяю expect
на отдельные it
-блоки, чтобы обеспечить чистоту и удобство отладки тестов.