Вызовите исключение, если один из параметров не объявлен в команде CLI, использующей Cypress? - PullRequest
1 голос
/ 06 марта 2020

Фактические результаты: я только что пробежался, и ничего не происходит даже после ожидания в течение получаса. Actual result

Ожидаемые результаты: Вывести исключение c, если указан параметр c.

В настоящее время у меня нет сообщений об ошибках. Если я попытаюсь запустить его, например, с PAGE_TITLE, равным undefined, ничего не произойдет.

Пробный сценарий ios: я добавлю все константы, которые находятся в пакете. json, docker: test- создание данных: добавление виджетов в константный массив с именем requiredFields и последующий вызов обязательных полей из функции validateParameters, которая не работает по неизвестной причине.

Показать некоторый код: Здесь я вызываю --spe c с указанными c параметрами

    "docker:test-data-creation:add-widgets": "XSOCK=/tmp/.X11-unix && XAUTH=/tmp/.docker.xauth && xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge - && chmod 755 $XAUTH && docker run --rm -it -v $XSOCK:$XSOCK -v $XAUTH:$XAUTH -e XAUTHORITY=/tmp/.docker.xauth -e DISPLAY=$DISPLAY --network=sity_static-network -v $PWD:/test -w /test cypress/included:3.8.1 --browser chrome --env baseUrl=http://symfony.local,PAGE_TITLE='Slider Swiper Widget Test',MAX_WIDGETS_IN_PAGE=50,TOTAL_WIDGETS_COUNT=250,WIDGET_TYPE='SliderSwiper',WIDGETS_WITH_ROWS=50 --spec 'cypress/integration/creation/dynamically_add_widgets_spec.js'" 

Part if dynamicically_add_widgets_spe c. js

   * Name of the page where you like to save this widgets
   */
  const PAGE_TITLE = Cypress.env('PAGE_TITLE');

  /**
   * Maximum widgets in the page
   */
  const MAX_WIDGETS_IN_PAGE = Cypress.env('MAX_WIDGETS_IN_PAGE');

  /**
   * Number of total widgets to be added to the page
   */
  const TOTAL_WIDGETS_COUNT = Cypress.env('TOTAL_WIDGETS_COUNT');

  /**
   * Just change the type of the widget to select your needed widget
   */
  const WIDGET_TYPE = Cypress.env('WIDGET_TYPE');

  /**
   * This variable is needed because we want to build some widgets with rows and some widgets don't need rows. The number below is how many widgets one need with rows.
   */
  const WIDGETS_WITH_ROWS = Cypress.env('WIDGETS_WITH_ROWS');

  /**
   * This is a variable that is used to count needed widgets with rows. This variable should always stay 0.
   */
  let ROWS_COUNTER = 0;

  /**
   * This constant is used to determine if all required fields are declared in the cli command
   */
  const requiredFields = [
    PAGE_TITLE,
    MAX_WIDGETS_IN_PAGE,
    TOTAL_WIDGETS_COUNT,
    WIDGET_TYPE,
    WIDGETS_WITH_ROWS
  ];

Здесь я вызываю его из функции

context("Dynamically create widgets", () => {
    validateParameters(requiredFields);
    createWidgets(WIDGET_TYPE, TOTAL_WIDGETS_COUNT, MAX_WIDGETS_IN_PAGE, WIDGETS_WITH_ROWS);
  }); 

validateParameters ->

  function validateParameters(requiredFields) {
    requiredFields.forEach((field) => {
      if (Cypress.env(field) !== undefined) {
        return;
      }
      throw {message: `Field ${field} is required. Please provide it using --env ${field}. Please look at README.md for an example.`};
    })
  }

PS Я знаю, что это forEach не может работать, потому что я Мне нужно конкретное сообщение c, если указанный параметр c отсутствует, но я пытаюсь получить это сообщение, а затем перейти к указанному сообщению c, если указанный параметр c отсутствует.

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Вы уже устанавливаете переменную requiredFields выше с помощью Cypress.env ('...'), поэтому вам не нужно вызывать ее снова.

Документы Cypress заявляют, что Cypress.env ('. .. ') возвращает переменную или неопределенное значение.

    /**
     * Returns specific environment variable or undefined
     * @see https://on.cypress.io/env
     * @example
     *    // cypress.json
     *    { "env": { "foo": "bar" } }
     *    Cypress.env("foo") // => bar
     */
    env(key: string): any

Подробнее о Cypress env здесь: https://docs.cypress.io/guides/guides/environment-variables.html#Overriding -Конфигурация

0 голосов
/ 09 марта 2020

Проблема в том, что в validateParameters функции вы передали массив констант. Каждая константа будет иметь значение, например PAGE_TITLE = Cypress.env('PAGE_TITLE'); так что это будет все, что определено в .env. Это может быть строка, число, неопределенное значение или что-то еще.

Для решения проблемы необходимо проверить, не является ли переданное поле неопределенным.

function validateParameters(requiredFields) {
    requiredFields.forEach((field) => {
      if (field !== undefined) {
        return;
      }
      throw {message: `Field ${field} is required. Please provide it using --env ${field}. Please look at README.md for an example.`};
    })
  }
...