Cypress w/graphql - 在通过 UI 进行测试时获取 AUTH 时遇到问题。存根突变的更好方法?
Cypress w/graphql - having issues getting AUTH with testing via UI. Better way to stub mutation?
因此,如果我在不与后端进行太多交互的情况下在真空中测试页面,效果会很好。如果它命中任何类型的服务,我在实际与我的 UI 交互时会遇到问题。基本上,没有什么是经过授权的。我尝试以编程方式设置 cookie,没有骰子。我尝试读取 cookie,不。顺便说一句,我的整个网站都需要登录。
cy.setCookie('sess', ';askjdfa;skdjfa;skdjfa;skdjfa;skfjd');<-- does not work
cy.getCookie('sess').should('exist') <-- does not work
我对 "test" 的最佳方法有疑问。例如,我有一个帐户部分,用户可以 "update" 他们的个人信息。我尝试填写表格(通过 UI 测试),但提交被拒绝,没有授权。即使我刚刚登录(通过 UI 测试)。 - 我知道我需要删除它,因为 UI- 登录我网站的每个部分是不好的做法。
所以,我不知道如何用 cy.request() 存根 graphql 调用。这是我的突变。
mutation Login($email: Email!, $password: String!) {
login(email: $email, password: $password) {
userID
firstName
lastName
}
}
现在,我正在为我正在测试的站点的每个部分导入登录规范。我知道这是一种反模式。喜欢解决这个问题。
我的 AUTH (cookie) 没有被设置。即使我尝试以编程方式设置它,也不起作用。
也许我应该去掉我的 graphql 突变?怎么样?
最后,如果我正在删除我的 graphql 突变,我该如何更新会话(通过我的主会话查询)。如果我能让这些突变起作用,那么刷新页面就会得到我的更新数据,所以我并不完全需要这部分。
有什么想法吗?
我没有做存根和所有那些,因为你问的是突变如何与我的另一个 post 中的 cy.request
一起工作。我是这样做的,它基本上可以工作。希望这会有所帮助
不过我先创建了一个 const
export const join_graphQL = (query, extra={}) => {
return `mutation {
${query}(join: { email: "${extra.email}", id: "${extra.id}" }) {
id, name, email
}
}`
};
请求配置const
export const graphqlReqConfig = (body={}, api=graphQlapi, method='POST') => {
return {
method,
body,
url: api,
failOnStatusCode: false
}
};
突变查询 cy.request
const mutationQuery = join_graphQL('mutationName', {
email: "email",
id: 38293
});
cy.request(graphqlReqConfig({
query: mutationQuery
})).then((res) => {
const data = res.body.data['mutationName']; // your result
});
希望不要太乱看。
基本上字段需要是字符串,例如 "${extra.email}"
否则它会给你错误。不确定 graphql 如何深入工作,但如果我只是这样做 ${extra.email}
我会得到一个错误,我忘记了它是什么错误。
这是使用 cy.request
处理突变的更简单方法
const mutation = `
mutation {
updateUser(id: 1, firstName: "test") {
firstName
lastName
id
role
}
}`
cy.request({
url: url,
method: 'POST',
body: { query: mutation },
headers: {
Authorization: `Bearer ${token}`,
},
})
因此,如果我在不与后端进行太多交互的情况下在真空中测试页面,效果会很好。如果它命中任何类型的服务,我在实际与我的 UI 交互时会遇到问题。基本上,没有什么是经过授权的。我尝试以编程方式设置 cookie,没有骰子。我尝试读取 cookie,不。顺便说一句,我的整个网站都需要登录。
cy.setCookie('sess', ';askjdfa;skdjfa;skdjfa;skdjfa;skfjd');<-- does not work
cy.getCookie('sess').should('exist') <-- does not work
我对 "test" 的最佳方法有疑问。例如,我有一个帐户部分,用户可以 "update" 他们的个人信息。我尝试填写表格(通过 UI 测试),但提交被拒绝,没有授权。即使我刚刚登录(通过 UI 测试)。 - 我知道我需要删除它,因为 UI- 登录我网站的每个部分是不好的做法。
所以,我不知道如何用 cy.request() 存根 graphql 调用。这是我的突变。
mutation Login($email: Email!, $password: String!) {
login(email: $email, password: $password) {
userID
firstName
lastName
}
}
现在,我正在为我正在测试的站点的每个部分导入登录规范。我知道这是一种反模式。喜欢解决这个问题。
我的 AUTH (cookie) 没有被设置。即使我尝试以编程方式设置它,也不起作用。
也许我应该去掉我的 graphql 突变?怎么样?
最后,如果我正在删除我的 graphql 突变,我该如何更新会话(通过我的主会话查询)。如果我能让这些突变起作用,那么刷新页面就会得到我的更新数据,所以我并不完全需要这部分。
有什么想法吗?
我没有做存根和所有那些,因为你问的是突变如何与我的另一个 post 中的 cy.request
一起工作。我是这样做的,它基本上可以工作。希望这会有所帮助
不过我先创建了一个 const
export const join_graphQL = (query, extra={}) => {
return `mutation {
${query}(join: { email: "${extra.email}", id: "${extra.id}" }) {
id, name, email
}
}`
};
请求配置const
export const graphqlReqConfig = (body={}, api=graphQlapi, method='POST') => {
return {
method,
body,
url: api,
failOnStatusCode: false
}
};
突变查询 cy.request
const mutationQuery = join_graphQL('mutationName', {
email: "email",
id: 38293
});
cy.request(graphqlReqConfig({
query: mutationQuery
})).then((res) => {
const data = res.body.data['mutationName']; // your result
});
希望不要太乱看。
基本上字段需要是字符串,例如 "${extra.email}"
否则它会给你错误。不确定 graphql 如何深入工作,但如果我只是这样做 ${extra.email}
我会得到一个错误,我忘记了它是什么错误。
这是使用 cy.request
const mutation = `
mutation {
updateUser(id: 1, firstName: "test") {
firstName
lastName
id
role
}
}`
cy.request({
url: url,
method: 'POST',
body: { query: mutation },
headers: {
Authorization: `Bearer ${token}`,
},
})