Жду в TestCafe - PullRequest
       22

Жду в TestCafe

0 голосов
/ 04 декабря 2018

У меня были некоторые проблемы с пониманием, когда / как 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 оценивается, по-видимому, в начале теста, а не когда тест достигает этой строки кода?Кажется, он не ведет себя асинхронно так, как я ожидал.

1 Ответ

0 голосов
/ 05 декабря 2018

Глядя на документацию (https://devexpress.github.io/testcafe/documentation/test-api/built-in-waiting-mechanisms.html),, кажется, что вам не нужно выделять его в свой собственный вызов, но вам придется перенести ожидание в начало цепочки?

Так, например, вместо:

<something>
  .click(usersPage.addUserModal.saveButton)
  .expect(usersPage.userCard.withText(userName).exists).ok({ timeout: 10000 })
  .expect(await usersPage.getGroupCount('All Users')).eql(origUserCount + 1);

Вы можете сделать:

await <something>
  .click(usersPage.addUserModal.saveButton)
  .expect(usersPage.userCard.withText(userName).exists).ok({ timeout: 10000 })
  .expect(usersPage.getGroupCount('All Users')).eql(origUserCount + 1);
...