测试 GraphQL API
Testing GraphQL API
我正在测试我的 GraphQL API,但我想稍微清理一下它。值得注意的是,我使用 chai-http
作为网络请求。这是我目前正在做的(有效):
let createUser = (()=> {
return new Promise((resolve, reject) => {
chai.request(server)
.post('/api/graphql/')
.set('content-type', 'application/json')
.send({ 'query' :
'mutation users { \
user : addUser(inputs: { \
firstName: \"Test\", \
lastName: \"User\", \
email: \"test@test.com\", \
}) { \
id, \
firstName \
} \
}'
})
.end((err, res) => {
if (err) { reject(err) }
let data = res.body.data;
let user = data.user;
resolve(user);
})
});
});
不过,我想稍微清理一下,然后做这样的事情:
let createUser = (() => {
let newUser = {
firstName: 'Test',
lastName: 'User',
email: 'test@test.com'
};
return new Promise((resolve, reject) => {
chai.request(server)
.post('/api/graphql/')
.set('content-type', 'application/json')
.send({ 'query' :
'mutation users { \
user : addUser(inputs: ' + JSON.stringify(newUser) + ') { \
id, \
firstName \
} \
}'
})
.end((err, res) => {
if (err) { reject(err) }
let data = res.body.data;
let user = data.user;
resolve(user);
})
});
});
但是,这种放置对象输入的样式不起作用并且 returns 错误请求错误。以下是返回的错误对象的部分内容:
知道为什么这行不通吗?提前致谢!
您的 JSON 输入似乎有问题。可能是你的换行符和引号的某种组合没有在服务器上正确解析。
但是,我仍然不建议像在 GraphQL 查询中那样内联变量。你应该这样做:
let createUser = (() => {
let newUser = {
firstName: 'Test',
lastName: 'User',
email: 'test@test.com'
};
return new Promise((resolve, reject) => {
chai.request(server)
.post('/api/graphql/')
.set('content-type', 'application/json')
.send({
'query' : 'mutation users ($input: CreateUserInput!) { \
user : addUser(inputs: $input) { \
id, \
firstName \
} \
}',
'variables' : {
'input': newUser
}
})
.end((err, res) => {
if (err) { reject(err) }
let data = res.body.data;
let user = data.user;
resolve(user);
})
});
});
您可以查看另一个 simple example here,了解如何在 Scaphold 上执行突变以创建 query
和 variables
分离的用户。
希望对您有所帮助!
我正在测试我的 GraphQL API,但我想稍微清理一下它。值得注意的是,我使用 chai-http
作为网络请求。这是我目前正在做的(有效):
let createUser = (()=> {
return new Promise((resolve, reject) => {
chai.request(server)
.post('/api/graphql/')
.set('content-type', 'application/json')
.send({ 'query' :
'mutation users { \
user : addUser(inputs: { \
firstName: \"Test\", \
lastName: \"User\", \
email: \"test@test.com\", \
}) { \
id, \
firstName \
} \
}'
})
.end((err, res) => {
if (err) { reject(err) }
let data = res.body.data;
let user = data.user;
resolve(user);
})
});
});
不过,我想稍微清理一下,然后做这样的事情:
let createUser = (() => {
let newUser = {
firstName: 'Test',
lastName: 'User',
email: 'test@test.com'
};
return new Promise((resolve, reject) => {
chai.request(server)
.post('/api/graphql/')
.set('content-type', 'application/json')
.send({ 'query' :
'mutation users { \
user : addUser(inputs: ' + JSON.stringify(newUser) + ') { \
id, \
firstName \
} \
}'
})
.end((err, res) => {
if (err) { reject(err) }
let data = res.body.data;
let user = data.user;
resolve(user);
})
});
});
但是,这种放置对象输入的样式不起作用并且 returns 错误请求错误。以下是返回的错误对象的部分内容:
知道为什么这行不通吗?提前致谢!
您的 JSON 输入似乎有问题。可能是你的换行符和引号的某种组合没有在服务器上正确解析。
但是,我仍然不建议像在 GraphQL 查询中那样内联变量。你应该这样做:
let createUser = (() => {
let newUser = {
firstName: 'Test',
lastName: 'User',
email: 'test@test.com'
};
return new Promise((resolve, reject) => {
chai.request(server)
.post('/api/graphql/')
.set('content-type', 'application/json')
.send({
'query' : 'mutation users ($input: CreateUserInput!) { \
user : addUser(inputs: $input) { \
id, \
firstName \
} \
}',
'variables' : {
'input': newUser
}
})
.end((err, res) => {
if (err) { reject(err) }
let data = res.body.data;
let user = data.user;
resolve(user);
})
});
});
您可以查看另一个 simple example here,了解如何在 Scaphold 上执行突变以创建 query
和 variables
分离的用户。
希望对您有所帮助!