Как добавить отрицательные утверждения вроде not.toHaveText в Detox? - PullRequest
0 голосов
/ 28 февраля 2019

Мне нужно установить отрицание для некоторого текстового содержимого и попробовать приведенный ниже код, но так как он не указан в документах, я ожидал, что он потерпит неудачу, и это действительно так, поэтому я хотел бы знать, как я могу достичь отрицания вэто дело.

await expect(element(by.id('myElemId'))).not.toHaveText('some text')

1 Ответ

0 голосов
/ 01 марта 2019

К сожалению, я не думаю, что Detox имеет возможность использовать .not свойство expect

Однако вы можете сделать что-то вроде этого:

Сначала создайте функцию, которая возвращаетлогическое значение, если существует конкретная текстовая фраза.Мы используем тот факт, что если значение не существует, оно выдаст ошибку и, обернув его в try/catch, мы можем вернуть логическое значение, которое мы затем сможем использовать в наших тестах.

async function hasText (id, text) {
  try {
    await expect(element(by.id(id))).toHaveText(text);
    return true;
  } catch (err) {
    return false;
  }
}

Затем вы можете использовать его следующим образом, выдавая ошибку, если она возвращает true для наличия текста.

it('should not have some text', async () => {
  await expect(element(by.id('myElemId'))).toBeVisible();
  let result = await hasText('myElemId', 'some text');
  // so if the text exists it will return true, as we don't want it to exist then we can throw our own error.
  if (result) {
    throw new Error('Should not have some text, but did.');
  }
});

Я знаю, что это не элегантное решение проблемы, и было бы гораздо приятнее, если бы Detox дал нам необходимые API, но я полагаю, что это можно было бы использовать в крайнем случае.

...