赛普拉斯w / graphql-在通过UI测试获得AUTH时遇到问题。存根突变的更好方法?

时间:2018-06-24 18:51:25

标签: cypress

因此,如果我在不与后端进行太多交互的情况下在真空中测试页面,则效果很好。如果遇到任何类型的服务,我在与UI进行实际交互时都会遇到问题。基本上,什么都不做。我尝试以编程方式setCookie,没有骰子。我试着读取cookie,不。顺便说一句,我的整个网站都需要登录。

cy.setCookie('sess', ';askjdfa;skdjfa;skdjfa;skdjfa;skfjd');<-- does not work

cy.getCookie('sess').should('exist') <-- does not work

我在“测试”这一最佳方法方面存在问题。例如,我有一个帐户部分,用户可以“更新”他们的个人信息。我尝试填写表单(通过UI测试),但是提交被拒绝,没有Auth。即使我刚刚登录(通过UI测试)。 -我知道我需要删除它,因为对于我网站的每个部分,UI登录都是一种不好的做法。

所以,我不知道如何使用cy.request()对graphql调用进行存根。这是我的突变。

mutation Login($email: Email!, $password: String!) {
  login(email: $email, password: $password) {
    userID
    firstName
    lastName
  }
}
  1. 现在,我正在导入我正在测试的站点的每个部分的登录规范。我知道这是一种反模式。喜欢解决这个问题。

  2. 未设置我的AUTH(cookie)。即使我尝试以编程方式设置它也不起作用。

  3. 也许我应该只保留我的graphql突变?怎么样?

  4. 最后,如果我取消了我的graphql突变,我该如何更新会话(通过主会话查询)。如果我可以使这些变异起作用,那么刷新页面将获得我的更新数据,因此我并不需要完全使用这一部分。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

在您发布的另一篇文章中,您一直询问该突变如何与cy.request一起使用,因此我并没有执行所有操作。我是这样做的,它基本上可以正常工作。希望这会有所帮助

我首先创建了一个const

export const join_graphQL = (query, extra={}) => {
    return `mutation {
        ${query}(join: { email: "${extra.email}", id: "${extra.id}" }) {
                id, name, email
            }    
    }`
};

请求配置常量

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},我会得到一个错误,但我忘记了它是什么错误。

答案 1 :(得分:1)

这是使用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}`,
    },
  })