В настоящее время я пытаюсь улучшить тесты в рамках реактивного проекта, в котором я использую Material UI. Я использую шутку и фермент для выполнения тестов.
До сих пор я использовал .find
для поиска компонентов, для выполнения действий над ними. Недавно я наткнулся на раздражение / проблему, для которой я не смог найти ответ. Чтобы выбрать определенный сценарий, я выбрал следующий:
У меня есть форма, в которой пользователь вводит
- имя
- фамилия
- email
- номер телефона
- и т. Д. ...
Я создаю оболочку для этой формы и наиболее разумный подход для поиска поля для .simulate('change')
были взяты в обертку и выполняли следующие действия:
// Arrange
const formWrapper = formWrapper(); // <--- A mount function to create the above described form
const firstNameField = formWrapper.find('input').at(1); // <--- This is currently my issue
const lastNameField = formWrapper.find('input').at(2); // <--- This is currently my issue
// ... and so forth
// Act
firstName.simulate('change', { target: { name: 'firstName', value: 'Bobby' },});
lastName.simulate('change', { target: { name: 'lastName', value: 'Brown' },});
// ... more simulations ofc
// Assert
// ... and some expects.
Мое раздражение заключается в том, что я "выбираю" свои входные данные. Единственная причина, по которой я знаю, что поле firstName - .at(1)
, заключается в том, что я посмотрел на HTML. Это не очень надежный метод. Если мне потребуется обновить эту форму, тогда весь тест будет прерван, и мне придется выяснить, какие поля какие еще раз.
Небольшое замечание: я использую текст UI Text. Поля в качестве базового компонента, но я разработал их в соответствии с моими требованиями. Я попытался передать некоторую пользовательскую поддержку моим компонентам (например, test="firstNameField"
), но это не очень хорошее решение, поскольку пользовательский интерфейс Material передает его всем дочерним компонентам. Если я делаю это, я, конечно, всегда могу найти .at(1)
, если я сделаю индивидуальную опору уникальной для каждого поля. Однако я не думаю, что это способ сделать это. Должен быть какой-то другой способ, о котором я пока не знаю.
Поэтому мой вопрос:
Кто-нибудь знает более надежный способ сделать это?
РЕДАКТИРОВАТЬ:
После прочтения комментариев и предложений, я обнаружил, что я мог быть слишком конкретным c в моем вопросе. Конечно, пример (с данными выше) является одной из проблем, с которыми я сталкиваюсь, но это также относится и к другим компонентам.
Допустим, у меня в описанном выше элементе формы есть два идентичных компонента (поля типографики - более конкретно, теги абзаца), которые оба состоят из одного и того же базового компонента, как бы я go сказал о различении этих двух ? Буду ли я вынужден дать им уникальные идентификаторы или есть какой-то другой способ? И даже если бы я дал им уникальные идентификаторы, они были бы переданы всем дочерним элементам, которые есть у компонентов Material UI.