testingGraphQL API

我正在testing我的GraphQL API,但我想稍微清理一下。 值得注意的是,我正在使用chai-http作为networking请求。 这是我目前正在做的(哪些工作):

 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); }) }); }); 

但是,这种风格的做法是放置对象input不起作用,并返回错误的请求错误。 以下是返回的错误对象的部分内容:

在这里输入图像描述

任何想法,为什么这是行不通的? 提前致谢!

看起来像你的JSONinput有一个问题。 这可能是你的换行符和你的报价的一些组合不能得到正确parsing在服务器上。

不过,我仍然不build议在你的GraphQL查询中插入你的variables。 你应该这样做,而不是:

 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); }) }); }); 

你可以在这里查看另外一个简单的例子 ,就是如何在Scaphold上执行一个变异来创build一个queryvariables分离的用户。

希望这可以帮助!