Мы используем атрибут data-test-target
и записываем его вручную в JSX. В простой версии это все, что вам нужно. Но если у вас есть сложные случаи, например, две формы на одной странице с одинаковыми полями, вам необходимо их различать. Итак, мы делаем это:
Цель может быть построена по 3 параметрам:
- block: required
- element: optional
- context: optional
Представьте, что у вас есть компонент React и вы хотите установить цели тестирования. Например, у вас есть 2 кнопки в компоненте: удалить и отредактировать, поэтому он будет выглядеть как
<button data-test-target="component-name:remove">Remove</button>
<button data-test-target="component-name">Edit</button>
Если у вас есть более одного этого компонента на странице, вы должны передать контекст в props:
<button data-test-target="component-name:remove::todo-list">Remove</button>
Помощник, который я использую, чтобы следовать этой идее:
import dashify from 'dashify';
export const createTestAttribute = ({
block: blockPart,
element,
context,
}) => {
const elementPart = element ? `:${dashify(element)}` : '';
const contextPart = context ? `::${dashify(context)}` : '';
return `${blockPart}${elementPart}${contextPart}`;
};
Использование:
<button
data-test-target={createTestAttribute({
block: 'component-name',
element: 'remove',
context: props.testContext,
})}
>
Remove
</button>
При его использовании тесты будут стабильными и не будут зависеть от вашей разметки имена структур и классов