Как использовать логическое ИЛИ в утверждении Cypress should

#javascript #mocha.js #cypress #assert

#javascript #mocha.js #cypress #утверждать

Вопрос:

У меня есть этот код

 cy.get(element).should('contain.text', search_word || search_word.toLowerCase())
  

И я получаю эту ошибку

 expected <div.games__element__title.card-title.h5> to contain text Hot, but the text was Ultimate hot
  

Как я могу использовать оператор OR, чтобы я мог утверждать, что текст элемента содержит искомое слово, написанное либо прописными, либо строчными буквами?

Ответ №1:

Для сравнения текста, вместо использования ИЛИ подхода, я предлагаю использовать сравнение в нижнем регистре, имея ожидаемый текст и фактический текст для сравнения в строчной версии. Это более чистый подход.

 cy.get(element).invoke('text').should(text => {
  expect(text.toLowerCase()).to.contain(search_word.toLowerCase());
})
  

другой альтернативой является использование регулярных выражений

 cy.get(element).invoke('text').should('match', /(h|H)ot/);
  

Ответ №2:

Один из способов достичь того, что вы ищете, — это использовать условный оператор в cypress. Мы получим внутренний текст из элемента, а затем проверим, присутствует ли в тексте слово hot или Hot, и на основе этого мы будем выполнять действия.

 cy.get(element).invoke('text').then((text) => {
   if (text.includes('Hot')) {
      //Do Something
   }
   else if (text.includes('hot')) {
      //Do Something
   }
   else {
      //Do Something
   }
})
  

Комментарии:

1. Да, это решило бы мою проблему, но не факт, что элемент содержит текст. Цель состоит в том, чтобы утверждать, что элемент содержит текст. Он также может не содержать hot

2. Я понял, что элемент предоставит вам текст Ultimate hot , теперь вы хотите проверить, является ли второе слово или hot или Hot или это что-то еще?

3. Элемент может дать мне только Ultimate или Ultimate hot или Ultimate Hot . Если элемент не выдает мне слово hot или Hot , тест должен завершиться неудачей.

4. Существует также концепция условного тестирования , упомянутая в документации cypress — аналогично этому ответу: docs.cypress.io/guides/core-concepts/conditional-testing . Разница в том, что в руководстве .then за ним следует другое .then утверждение, реагирующее на результат, найденный первым .then .