Как проверить, есть ли указанное количество кнопок? [reactjs, библиотека тестирования]

#reactjs #react-testing-library

Вопрос:

Я пытаюсь проверить, есть ли количество кнопок, указанных в компоненте React.

Я попытался найти в Google ответ на этот вопрос, но мне это не удалось.

Я получаю следующую ошибку: Unable to find an accessible element with the role "button".

Я получаю эту ошибку, вероятно, потому, что в коде нет тегов кнопок. смотреть ниже.

Итак, мой вопрос заключается в том, учитывая приведенный ниже код, как мне проверить, было ли отображено правильное количество кнопок? Я пытаюсь проверить это с помощью библиотеки тестирования реакций. Спасибо.

Вот соответствующий код —

  const { alignItems, direction, tab, title, description, buttons, pic } =
    props;
...
 <Grid container spacing={2}>
            {buttons.map((button, i) => (
              // eslint-disable-next-line react/no-array-index-key
              <Grid item key={i}>
                {button}
              </Grid>
            ))}
          </Grid>
...

HomeSection.propTypes = {
  alignItems: PropTypes.string,
  direction: PropTypes.string,
  tab: PropTypes.string,
  title: PropTypes.string.isRequired,
  description: PropTypes.string.isRequired,
  buttons: PropTypes.arrayOf(PropTypes.element).isRequired,
  pic: PropTypes.string.isRequired,
};
 

вот текущий код, который я написал. (это неверно, но это может быть полезно показать.)

  test('checks if it renders the given number of buttons', () => {
         render(<HomeSection
                  title="Topology"
                  description="Math course"
                  buttons={[]}
                  pic="manifold"/>
               );
        screen.debug();
        const items = screen.getByRole('button');
        expect(items).toHaveLength(0);
    });
 

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

1. пробовать queryByRole

2. я попробовал вашу идею и получил ошибку: expect(received).toHaveLength(expected) Matcher error: received value must have a length property whose value must be a number

3. queryByRole вероятно, возвращает значение undefined или null, если он не может найти объект, поэтому вам придется сделать что-то вроде expect(items).toBe(null)

4. да, я просто пытался это сделать. Спасибо!!!!!!

5. @frozen теперь я пытаюсь настроить buttons = {[<button>Hello</button>]} использование screen.toHaveLength(1) , но получаю сообщение об ошибке received value must have a length property whose value must be a number -что это может быть? Спасибо