【问题标题】:How to pass variables into cy.request for graphql/apollo without string interpolation如何在没有字符串插值的情况下将变量传递给 cy.request 以进行 graphql/apollo
【发布时间】:2023-04-09 17:07:02
【问题描述】:

目前,以下方法有效,但我知道这是不好的做法,我不希望将来因为此实施而遇到问题。

export const loginQuery = ({ email, password }) => `
  mutation login {
    login(email: "${email}", password: "${password}") {
      authToken
    }
  }
`;

export default ({ url, method, userPath }) => {
  cy.fixture(userPath).then(res => {
    const query = loginQuery(res);
    cy.request({
      method,
      url,
      headers: { 'Content-Type': 'application/json' },
      body: { query },
      failOnStatusCode: false
    });
  });
};

如何正常传入变量而不是手动进行字符串插值?

之所以这样写是因为我不能使用react-apollo/graphql-tag。我已经尝试过,但 graphqlreact-apollo 需要包装在一个不适用于此 cypress 上下文的组件中。

注意:上述实现不适用于对象/数组。我需要手动传入突变中写出的对象中的特定键,而不仅仅是一个变量来表示整个对象。这显然是个问题。

【问题讨论】:

  • 我完全了解graphql中有哪些变量。问题是如何传递它们。查询是一个字符串,而不是一个函数,因此像 graphql/gql 这样的工具可用于正常的 graphql 使用,以便可以传递变量。这里的目标是在没有任何一个的情况下完成同样的事情那些工具。
  • 第一个,使用正确的查询语法,第二个使用 fetch/curl/etc 搜索 SO 的突变

标签: javascript graphql cypress apollo string-interpolation


【解决方案1】:

解决方案比预期的要容易得多。不幸的是,我没有在网上看到任何这样的例子,但效果很好。

export const loginQuery = `
  mutation login($email: String!, $password: String!) {
    login(email: $email, password: $password) {
      authToken
    }
  }
`;

export default ({ url, method, userPath }) => {
  cy.fixture(userPath).then(res => {
    cy.request({
      method,
      url,
      headers: { 'Content-Type': 'application/json' },
      body: { query: loginQuery, variables: res },
      failOnStatusCode: false
    });
  });
};

我不知道我可以在正文中声明变量,如果我像往常一样构造查询/突变,它们会毫无问题地传入。

最接近我成功解决方案的是这个要点https://gist.github.com/yusinto/30bba51b6f903c1b67e0383f4a288269。但是,要点仍然使用字符串插值。看起来他可以通过设置变量来简化他的要点。

这个要点是在@xadm 的建议搜索字符串SO for mutations using fetch/curl/etc 中找到的

【讨论】:

  • ... 并且查询应该只是 const 字符串
  • 是的,感谢您指出这一点。我在我的实际代码中这样做了,但忘记在我发布的答案中删除它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
相关资源
最近更新 更多