Как избежать символа трубы | передать его в среду кипариса с помощью параметра командной строки?

Я хотел бы иметь возможность передавать строку «мой пароль | слово» кипарисовой среды с помощью командной строки.

Вот команда:

npx cypress run --spec .\cypress\e2e\tests\temp.cy.ts --env JIRA_PASS = "my pass|word"

Как избежать этого символа трубы?

Когда я получаю доступ к своей переменной env с помощью Cypress.env().JIRA_PASS, символ канала заменяется на запятую.

Я пробовал разные способы выхода с помощью , ^, ', `, но ни один из них, похоже, не работает.

Похоже, та же проблема возникает, когда вы добавляете , в переменную env.

Есть решение?

(Мне нужно сделать это, чтобы передать кредиты от Дженкинса сценарию кипариса, работающему на докере, из конвейера Дженкинса).

Я пытался найти документ, разные способы выхода, но ни один из них не работает.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
64
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я нашел решение:

Используя переменную системной среды, мы можем установить некоторую переменную окружения кипариса.

Это хорошая новость, потому что системные переменные env не жалуются на наличие символов типа char или |

Итак, мы экспортируем CYPRESS_JIRA_PASS=мой пароль|слово, а затем выполняем npx cypress run --spec .\cypress\e2e\tests\temp.cy.ts и при доступе к переменной с помощью Cypress.env().JIRA_PASS значение будет правильным и неизменным.

Я предполагаю, что что-то в том, как Cypress анализирует переменные среды с помощью флага --env, приводит к замене символа |. Вероятно, стоит опубликовать на гитхабе Cypress проблему, чтобы узнать, есть ли у них причина замены, а может быть, это просто ошибка.

Если бы вы были уверены, что в пароле будет только одна запятая, вы могли бы просто использовать String.replace, чтобы вернуть пароль к исходному значению.

Cypress.env('JIRA_PASS', Cypress.env('JIRA_PASS').replace(',', '|'));

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

CYPRESS_JIRA_PASS = "my pass|word" npx cypress run

Поскольку вы передаете учетные данные, используйте Вариант №2: cypress.env.json.

Сохраните, запомнив ввод паролей в командной строке. Его можно исключить из репозитория с помощью .gitignore.

{
  "JIRA_PASS": "my pass|word"
}
it('confirms the password special chars', () => {
  expect(Cypress.env('JIRA_PASS')).to.eq('my pass|word')
})

Если вы уже используете cypress.env.json и хотите вернуть его на Github, используйте password.env.json для хранения конфиденциальных данных.

Прочитайте это в cypress.config.js вот так:

const { defineConfig } = require('cypress');
const password = require('./password.env.json');

module.exports = defineConfig({
  env: {
    //  hard-coded env values here
    ...password
  },
})

Другие вопросы по теме