Библиотека тестирования DOM: Выбор кнопки, когда заголовок формы имеет одинаковое текстовое содержимое? - PullRequest
0 голосов
/ 05 февраля 2020

Я использую DOM Testing Library, а не React Testing Library, но для первого тега не было, поэтому я использовал последний, потому что это, кажется, самое близкое соответствие. Надеюсь, что все в порядке.

У меня есть форма аутентификации, кнопка отправки которой содержит текст «Войти», а страница также содержит заголовок с таким же содержанием:

screen shot of admin login form showing heading

Как видно на снимке экрана, я фактически изменил заголовок на «Admin Log In», потому что это (по крайней мере временно) решает проблему.

I ' Вы написали мой тест следующим образом:

import { getByPlaceholderText, getByText } from '@testing-library/testcafe';

const testHostname = process.env.TEST_HOST || 'https://redacted-qa-server';

fixture`Admin Auth`.page`${testHostname}/admin/`;

test('authentication works for a known account', async t => {
    await t
        .typeText(getByPlaceholderText('E-mail address'), username)
        .typeText(getByPlaceholderText('Your password'), password)
        .click(getByText('Log in'));

    const location = await t.eval(() => window.location);
    await t.expect(location.pathname).notContains('/login');
});

Стоит отметить, что в настоящее время и заголовок, и кнопка отправки в настоящее время используют CSS для оформления текста как всех заглавных букв, но оба кодируются с использованием case "Log in".

Если изменить содержимое заголовка на «Admin» и использовать точность точного соответствия в getByText, этот тест можно будет пройти. Но что, если я не хочу включать префикс «Admin» в заголовок?

Я знаю, что могу использовать совпадение с регулярным выражением, например getByText(/^log in$/i), без учета регистра, но не разрешать подстроки, но это не решить проблему «Я не хочу сохранять префикс администратора».

Я знаю, что могу использовать getAllByText, чтобы получить массив совпадений, и могу просто знать, какое из них Я хочу щелкнуть ... но это кажется go вопреки духу DOM Testing Library. Есть ли благословенное решение этой проблемы?

1 Ответ

1 голос
/ 06 февраля 2020

Вы можете использовать getByText(/log in/i, {selector: 'button'}) для выбора кнопки входа в систему.

Вас также может заинтересовать предстоящая опция name для *ByRole запросов. После того, как это будет выпущено, вы также можете сделать: getByRole('button', {name: /log in/i}).

Учитывая выбор между ними, я думаю, я бы предпочел getByText. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...