Как исправить; Оператор if-else пропускает часть if и напрямую переходит к части else если? - PullRequest
0 голосов
/ 15 января 2019

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

Но проблема в том, он входит в систему с ролью «драйвера» и проверяет «rides.title» и «chauffeurs.title». Поскольку роль «водитель» не включает «chauffeurs.title», тест не пройден.

Он пропускает часть "if" и напрямую переходит к части "else if".

Что я пробовал:

Я попытался проверить, хорошо ли работает мой цикл, и, очевидно, он работает хорошо.

Я удалил весь блок if, вставил приведенный ниже код и увидел, что он вошел в систему с каждой отдельной ролью и проверил наличие «rides.title».

.visit('/planned')
          .get('[data-qa="rides.title"')
          .should('exist')
          .get('[data-qa="logout"]')
          .click()

За исключением последней роли; так как у него нет «rides.title», что нормально.

Вот полный код для обзора и получения дополнительной информации о том, что я сделал до сих пор:

const roles = ["driver", "dispatcher", "provider", "reviewer", "admin"];

it("Navigation items for a single permission", () => {
  cy.fixture("users.json").then(users => {
    const user = users[Cypress.env("ENVIRONMENT")];
    roles.forEach(role => {
      cy.login(user[role], Cypress.env("DEFAULT_USER_PASSWORD")).then(
        response => {
          cy.setCookie("__bl_pp__", response.body.result.access_token);
          if (user[role] === "driver") {
            cy.visit("/planned")
              .get('[data-qa="rides.title"')
              .should("exist")
              .get('[data-qa="logout"]')
              .click();
          } else if (["dispatcher", "provider", "reviewer"].includes(user[role])) {
            cy.visit("/planned")
              .get('[data-qa="rides.title"')
              .should("exist")
              .get('[data-qa="chauffeurs.title"')
              .should("exist")
              .get('[data-qa="logout"]')
              .click();
          } else {
            cy.visit("/planned")
              .get('[data-qa="chauffeurs.title"')
              .should("exist")
              .get('[data-qa="logout"]')
              .click();
          }
        })
      })
    })
  })
})

Ожидаемый сценарий должен быть; тест должен войти в систему с 5 различными ролями и проверить доступные вкладки, как указано в коде выше.

Role        Navigation Tabs
Driver      Rides
Dispatcher  Rides, Chauffeurs
Provider    Rides, Chauffeurs
Reviewer    Rides, Chauffeurs
Admin       Chauffeurs

Заранее спасибо!

Вот мой файл users.json:

{
  "development": 
  {
    "driver": "aa+driver@b.com",
    "dispatcher": "bb+dispatcher@b.com",
    "provider": "cc+provider@b.com",
    "reviewer": "dd+reviewer@b.com",
    "admin": "ee+admin@b.com"
  }
}

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Вы не должны проверять

if (user[role] === "driver")

и

if (["dispatcher", "provider", "reviewer"].includes(user[role]))

потому что user[role] является объектом прибора.

Вы должны проверить

if (role === "driver")

и

if (["dispatcher", "provider", "reviewer"].includes(role))

Не уверен, что это решит все проблемы, но это очевидный первый шаг.

0 голосов
/ 17 января 2019

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

0 голосов
/ 15 января 2019

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

if(user[role] === "dispatcher" || "provider" || "reviewer") {
   ...
}

Это в основном означает «если пользовательская роль является« диспетчер »или« истина или истина ») и может быть сокращено до« истина ». Это потому, что любая непустая строка всегда является «правдивой» в js.

Вам нужно повторить сравнение для каждой из этих групп "или", например:

if(user[role] === "dispatcher" || user[role] === "provider" || user[role] === "reviewer") {
   ...
}

Или желательно так:

if(["dispatcher", "provider", "reviewer"].includes(user[role])) {
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...