Как настроить утверждения в Cypress - PullRequest
1 голос
/ 30 января 2020

Мне нужно проверить, что массив объектов содержит определенное значение. Тест написан на Cypress, и для этого я использую cy.wrap и .some().

Мой код выглядит так:

const myCustomArray = [{ name: 'Lisa' }, { name: 'Katie' }];
cy.wrap(myCustomArray.some((user) => {
    if (user.name === 'Lisa') {
      return true;
    } else {
      return false;
    }
  })).should('eq', true);

Это работает хорошо, но проблема в том, что тогда он возвращает мне очень неопределенное c сообщение в консоли Cypress.

То, что я хотел бы получить, это изменить мой код таким образом, чтобы сообщение было понятно. По идее, это было бы что-то вроде этого:

const myCustomArray = [{ name: 'Lisa' }, { name: 'Katie' }];
cy.wrap(myCustomArray.some((user) => {
    if (user.name === 'Lisa') {
      return 'user name is Lisa';
    }
  })).should('eq', 'user name is Lisa');

Но это не может работать, поскольку .some() может возвращать только логическое значение. Я предполагаю, что есть функция массива, которая могла бы помочь мне сделать это, но я не могу найти какую.

Я не уверен, что:

  • Есть команды Cypress, которые я не зная, что может решить эту проблему, например. Настройка сообщения подтверждения.
  • Или это можно решить с помощью JavaScript

Оба решения подойдут для меня.

1 Ответ

1 голос
/ 31 января 2020

Как насчет использования .find() вместо .some() и глубокого вычисления результата,

cy.wrap(myCustomArray.find(user => user.name === 'Lisa')) 
  .should('deep.eq', { name: 'Lisa' });

Ожидается, что ASSERT {name: Lisa} будет полностью равен {name: Lisa}

или если у вас есть большие объекты и вы просто хотите увидеть имя,

cy.wrap(myCustomArray.map(user => user.name).find(name => name === 'Lisa')) 
  .should('eq', 'Lisa');

ASSERT ожидал, что Лиза будет равна Лизе

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