Библиотека тестирования React: совпадение количества кнопок
Я создал приложение с помощью create-response-app. Ниже представлен мой компонент счетчика и тестовый файл. Я пытаюсь создать тест для трех статических кнопок в моем компоненте. Первый тест проходит нормально, а второй тест дает ошибку, указанную ниже.
КОМПОНЕНТ РЕАКТИРОВАНИЯ:
import React from "react";
import PropTypes from "prop-types";
import classes from "./Counter.module.css";
function Counter(props) {
return (
<div className={classes.Wrapper}>
<div>
<p>
Click Counter - {props.value}
</p>
</div>
<div>
<button onClick={props.counterIncrement} className={classes.custButton} name="first"> Increment </button>
{/* <button onClick={props.counterDecrement} className={classes.custButton}> Decrement </button>
<button onClick={props.resetCounter} className={classes.custButton}> Reset </button> */}
</div>
</div>
);
}
Counter.propTypes = {
value: PropTypes.number,
clickHandler: PropTypes.func,
};
export default Counter;
ТЕСТОВЫЙ ФАЙЛ:
import React from 'react'
import {render, fireEvent, screen, cleanup} from '@testing-library/react'
import Counter from "./Counter";
afterEach(cleanup);
describe('Counter', () => {
test('renders counter value 10', () => {
render(<Counter />);
//screen.debug();
expect(screen.getByText(/Click Counter -/)).toBeInTheDocument();
})
})
test('renders three buttons', () => {
render(<Counter />);
const items = screen.findAllByRole('button');
expect(items).toHaveLength(3);
})
СООБЩЕНИЕ ОБ ОШИБКЕ:
FAIL src / components / Counter / Counter.test.js ● отображает три кнопки ожидают (получены) .toHaveLength (ожидаемые) Ошибка сопоставления: полученное значение должно иметь свойство длины, значение которого должно быть числом Тип полученного объекта: полученный объект имеет значение: {} 19 | render (); 20 | const items = screen.findAllByRole ('кнопка'); > 21 | ожидать (элементы) .toHaveLength (3); | ^ 22 | }) в Object..test (src / components / Counter / Counter.test.js: 21: 19) *
Ответы
В предоставленном вами примере вы используете .findAllByRole('button')
, который возвращает обещание, и его нужно ждать следующим образом:
test('renders three buttons', async () => {
render(<Counter />)
const items = await screen.findAllByRole('button')
expect(items).toHaveLength(3)
})
Другое решение - использовать .getAllByRole('button')
, и в этом случае вы можете сразу же утверждать результат.