使用赛普拉斯 .request 调用 GraphQL 端点

Posted

技术标签:

【中文标题】使用赛普拉斯 .request 调用 GraphQL 端点【英文标题】:Call GraphQL endpoints using Cypress .request 【发布时间】:2018-10-03 22:05:04 【问题描述】:

我用谷歌搜索了cypress request with graphql,但我看到很多人提到mock up serverstub 等等。但是我找不到一个完整的例子来说明如何将 GraphQL 与 cy.request 一起使用。

【问题讨论】:

【参考方案1】:

也许您可以在使用cy.request 时尝试此尝试,就像您在cy.request 中使用restful 的通常方式一样

例如,您的查询名称为 findUser,变量为 username 您的查询应该类似于findUser(username:"hello")id, name 等等

但不仅仅是这个,你需要将它作为json 传递,如果它是一个查询,那么它将是"query": findUser(username:"hello")id, name 这实际上是你的身体。

下面是一个例子……

const query = `
  findUser(username:"hello") 
    id
  
`;
    
cy.request(
  url: 'http://localhost/graphql/',  // graphql endpoint
  body:  query ,                   // or  query: query  depending if you are writing with es6
  failOnStatusCode: false            // not a must but in case the fail code is not 200 / 400
).then((res) => 
  cy.log(res);
);

【讨论】:

很好,这确实有效,非常感谢。我什至尝试使用 graphql-request,但效果不如预期 你能用突变完成这项工作吗?我似乎无法解决它。有什么想法吗? @jamesemanon 这也适用于突变,与查询相同。你想发个帖子让我给你示例代码吗? @jamesemanon 给我你的问题帖子的 URL,这样我就可以给你一个示例代码。至于图片上传,我还没有那么远,但也许你可以看看这两个帖子,希望对你有所帮助。 ***.com/questions/47074225/… 和 github.com/cypress-io/cypress/issues/170 ***.com/questions/51012988/…【参考方案2】:

我添加method: "post"后,选择的答案对我有用

const query = `
  query getItems 
    items 
      items 
        id
      
    
  
`;

cy.request(
  method: "post",
  url: 'http://localhost:4000/graphql',
  body:  query ,
).then((res) => 
  console.log(res.body);
);

【讨论】:

以上是关于使用赛普拉斯 .request 调用 GraphQL 端点的主要内容,如果未能解决你的问题,请参考以下文章

在赛普拉斯的测试中保留 cookie / localStorage 会话

有没有办法断言赛普拉斯没有调用路由?

如何在赛普拉斯的所有测试套件之前执行代码?

赛普拉斯:我们如何在赛普拉斯中使用不记名令牌编写 GET 请求?

赛普拉斯可以运行在赛普拉斯文件夹之外导入的测试文件吗?

赛普拉斯 - 我不知道为具有更多选项的列表选择哪个选择器