环境变量不受控更新
environment variable uncontrolled update
我目前正在尝试以动态方式处理 cy.request header。
为此,我在环境变量中设置了默认值 header,如果特定请求需要,我会附加额外的 header。
问题是在请求结束时,环境变量自动更新为本地 header 值。
这是我使用的代码:
function my_function(jSessionCookie) {
// build header
let header = Cypress.env("defaultAPIheader")
console.log("default header = ", header) // (1)
header["Connection"] = "keep-alive"
header["Cookie"] = jSessionCookie
console.log("header = ", header) // (2)
return cy.request({
method: 'GET',
headers: header,
url: '<my_url>',
body: null,
referer: '/rootapp/index.html',
referrerPolicy: "strict-origin-when-cross-origin",
failOnStatusCode: true
}).its('body').then((body) => {
Cypress.env("requestToken", body) // store for further use
console.log("default header2 = ", Cypress.env("defaultAPIheader")) // (3)
return body
})
}
我从控制台看到的是:
(1) default header = {Accept: 'application/json, text/plain, */*'}
(2) header = {Accept: 'application/json, text/plain, */*', Connection: 'keep-alive', Cookie: '<my_cookie>'} which is what I expect
(3) default header2 = {Accept: 'application/json, text/plain, */*', Connection: 'keep-alive', Cookie: '<my_cookie>'}
看起来环境变量已被本地值替换,但无法弄清楚它是如何发生的。
一位同事发现了问题所在(谢谢罗宾!)。变量设置给出了一个参考而不是值。
为了避免我修改我的代码如下:
let header = Cypress._.cloneDeep(Cypress.env("defaultAPIheader"))
通过在文件开头设置const { _, $ } = Cypress
,可以减少:
let header = _.cloneDeep(Cypress.env("defaultAPIheader"))
这不再修改我的环境变量。
我目前正在尝试以动态方式处理 cy.request header。
为此,我在环境变量中设置了默认值 header,如果特定请求需要,我会附加额外的 header。
问题是在请求结束时,环境变量自动更新为本地 header 值。
这是我使用的代码:
function my_function(jSessionCookie) {
// build header
let header = Cypress.env("defaultAPIheader")
console.log("default header = ", header) // (1)
header["Connection"] = "keep-alive"
header["Cookie"] = jSessionCookie
console.log("header = ", header) // (2)
return cy.request({
method: 'GET',
headers: header,
url: '<my_url>',
body: null,
referer: '/rootapp/index.html',
referrerPolicy: "strict-origin-when-cross-origin",
failOnStatusCode: true
}).its('body').then((body) => {
Cypress.env("requestToken", body) // store for further use
console.log("default header2 = ", Cypress.env("defaultAPIheader")) // (3)
return body
})
}
我从控制台看到的是:
(1) default header = {Accept: 'application/json, text/plain, */*'}
(2) header = {Accept: 'application/json, text/plain, */*', Connection: 'keep-alive', Cookie: '<my_cookie>'} which is what I expect
(3) default header2 = {Accept: 'application/json, text/plain, */*', Connection: 'keep-alive', Cookie: '<my_cookie>'}
看起来环境变量已被本地值替换,但无法弄清楚它是如何发生的。
一位同事发现了问题所在(谢谢罗宾!)。变量设置给出了一个参考而不是值。 为了避免我修改我的代码如下:
let header = Cypress._.cloneDeep(Cypress.env("defaultAPIheader"))
通过在文件开头设置const { _, $ } = Cypress
,可以减少:
let header = _.cloneDeep(Cypress.env("defaultAPIheader"))
这不再修改我的环境变量。