Я хотел бы иметь возможность передавать строку «мой пароль | слово» кипарисовой среды с помощью командной строки.
Вот команда:
npx cypress run --spec .\cypress\e2e\tests\temp.cy.ts --env JIRA_PASS = "my pass|word"
Как избежать этого символа трубы?
Когда я получаю доступ к своей переменной env с помощью Cypress.env().JIRA_PASS, символ канала заменяется на запятую.
Я пробовал разные способы выхода с помощью , ^, ', `, но ни один из них, похоже, не работает.
Похоже, та же проблема возникает, когда вы добавляете , в переменную env.
Есть решение?
(Мне нужно сделать это, чтобы передать кредиты от Дженкинса сценарию кипариса, работающему на докере, из конвейера Дженкинса).
Я пытался найти документ, разные способы выхода, но ни один из них не работает.





Я нашел решение:
Используя переменную системной среды, мы можем установить некоторую переменную окружения кипариса.
Это хорошая новость, потому что системные переменные 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
},
})