问题描述
当前,下面的方法有效,但是我知道这是一种不好的做法,并且我不想由于此实现而在将来遇到问题。
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
。我已经尝试过,但是graphql
和react-apollo
需要包装在不适用于此柏树上下文的组件中。
注意:上面的实现不适用于对象/数组。我将需要手动传递突变中写出的对象内的特定键,而不仅仅是代表整个对象的变量。这显然是一个问题。
解决方法
该解决方案比预期的容易得多。不幸的是,我在网上没有看到任何示例,但是效果很好。
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