У меня были некоторые проблемы с пониманием, когда / как await
используется и требуется в TestCafé.
Почему для этой функции требуется await
в первой строке?
async getGroupCount(groupName) {
const groupFilterLinkText = await this.groupFilterLink.withText(groupName).textContent;
const openInd = groupFilterLinkText.indexOf('(');
const closeInd = groupFilterLinkText.indexOf(')');
const count = parseInt(groupFilterLinkText.slice(openInd + 1, closeInd), 10);
return count;
}
Позже я обнаружил в документе, что она говорит: «Обратите внимание, что эти методы и методы получения свойств асинхронны,поэтому используйте await для получения свойства элемента. "Однако я использую функцию, которую я написал, довольно синхронно, так что это застало меня врасплох.Я гарантировал, что страница находится в том состоянии, в котором я хочу, чтобы она была, и я просто хочу проанализировать строку, но тестовые ошибки в строке 2 этой функции без async
/ await
.
В связи с этим, это пример тестового примера, который вызывает эту функцию:
test('Verify an account owner can create a single user', async (t) => {
const userName = 'Single User';
const userEmail = 'singleuser@wistia.com';
const origUserCount = await usersPage.getGroupCount('All Users');
await t
.click(usersPage.addUserButton);
await waitForReact();
await t
.typeText(usersPage.addUserModal.nameInput, userName)
.typeText(usersPage.addUserModal.emailInput, userEmail)
.expect(usersPage.addUserModal.saveButton.hasAttribute('disabled')).notOk()
.click(usersPage.addUserModal.saveButton)
.expect(usersPage.userCard.withText(userName).exists).ok({ timeout: 10000 });
const newUserCount = await usersPage.getGroupCount('All Users');
await t
.expect(newUserCount).eql(origUserCount + 1);
});
Первоначально у меня были последние несколько строк теста, выглядящие так:
await t
...
.click(usersPage.addUserModal.saveButton)
.expect(usersPage.userCard.withText(userName).exists).ok({ timeout: 10000 })
.expect(await usersPage.getGroupCount('All Users')).eql(origUserCount + 1);
То есть он был включен в одну цепочку функций для всего теста.Это не удалось, поскольку значение await usersPage.getGroupCount('All Users')
по-прежнему возвращало исходное значение, а не обновлялось.Я не понимаю, почему мне нужно разделить это на собственный вызов функции.Почему это getGroupCount
оценивается, по-видимому, в начале теста, а не когда тест достигает этой строки кода?Кажется, он не ведет себя асинхронно так, как я ожидал.