Bra*_*don 1 javascript string-interpolation apollo graphql cypress
目前,以下方法有效,但我知道这是不好的做法,我不想在将来因这种实现而遇到问题。
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
});
});
};
Run Code Online (Sandbox Code Playgroud)
如何正常传入变量而不是通过字符串插值手动执行?
我这样写的原因是因为我不能使用react-apollo/ graphql-tag。我已经尝试过,但是graphql需要react-apollo将其包装在一个不适用于此 cypress 上下文的组件中。
注意:上述实现不适用于对象/数组。我需要手动传入突变中写出的对象中的特定键,而不仅仅是一个变量来表示整个对象。这显然是一个问题。
解决方案比预期容易得多。不幸的是,我在网上没有看到任何这样的例子,但它效果很好。
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
});
});
};
Run Code Online (Sandbox Code Playgroud)
我不知道我可以在主体中声明变量,如果我像平常一样构造查询/突变,它们就会毫无问题地传递。
最接近我成功的解决方案是这个要点https://gist.github.com/yusinto/30bba51b6f903c1b67e0383f4a288269。然而,要点仍然使用字符串插值。看起来他可以通过设置变量来简化他的要点。
这个要点是通过 @xadm 的建议搜索字符串找到的SO for mutations using fetch/curl/etc