如何用柏树操纵 __APOLLO_STATE__
How to manipulate __APOLLO_STATE__ with cypress
我们正在向客户端发出一个服务器端请求,该请求 returns 在 window
下具有 __APOLLO_STATE__
对象的页面包含该页面使用的所有 graphql 数据。
目标是操纵 window 以模拟我们的 API.
问题是,__APOLLO_STATE__
不可用 onBeforeLoad but only onLoad
所以onBeforeLoad
cy
.visit(url, {
onBeforeLoad: (contentWindow) => {
cy.stub(contentWindow, '__APOLLO_STATE__').returns('');
},
})
表示存根不会更改任何内容,因为页面已经加载,并且
onload
cy
.visit(url, {
onLoad: (contentWindow) => {
cy.stub(contentWindow, '__APOLLO_STATE__').returns('');
},
})
会抛出错误,因为它不存在
Cannot stub non-existent own property APOLLO_STATE
遇到这个问题的人有什么建议吗?
不确定这是否是你的意思,但你可以拦截每个 graphql 请求并决定你想要什么 return
Cypress.Commands.add('mockGQL', (query, body) => {
cy.intercept('/graphql', (req) => {
if (req.body.includes(query)) {
req.reply({
body: body,
headers: {
'access-control-allow-origin': '*'
}
})
}
})
我们正在向客户端发出一个服务器端请求,该请求 returns 在 window
下具有 __APOLLO_STATE__
对象的页面包含该页面使用的所有 graphql 数据。
目标是操纵 window 以模拟我们的 API.
问题是,__APOLLO_STATE__
不可用 onBeforeLoad but only onLoad
所以onBeforeLoad
cy
.visit(url, {
onBeforeLoad: (contentWindow) => {
cy.stub(contentWindow, '__APOLLO_STATE__').returns('');
},
})
表示存根不会更改任何内容,因为页面已经加载,并且
onload
cy
.visit(url, {
onLoad: (contentWindow) => {
cy.stub(contentWindow, '__APOLLO_STATE__').returns('');
},
})
会抛出错误,因为它不存在
Cannot stub non-existent own property APOLLO_STATE
遇到这个问题的人有什么建议吗?
不确定这是否是你的意思,但你可以拦截每个 graphql 请求并决定你想要什么 return
Cypress.Commands.add('mockGQL', (query, body) => {
cy.intercept('/graphql', (req) => {
if (req.body.includes(query)) {
req.reply({
body: body,
headers: {
'access-control-allow-origin': '*'
}
})
}
})