2017-05-11 5 views
4

Je suis en train de tester mon API GraphQL, mais j'aimerais la nettoyer un peu. Il est à noter que j'utilise chai-http pour les demandes de réseau. Voici ce que je suis en train de faire (qui fonctionne):Test de l'API GraphQL

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: \"[email protected]\", \ 
      }) { \ 
      id, \ 
      firstName \ 
      } \ 
     }' 
     }) 
     .end((err, res) => { 
     if (err) { reject(err) } 
     let data = res.body.data; 
     let user = data.user; 
     resolve(user); 
     }) 
    }); 
}); 

Cependant, je voudrais nettoyer un peu et faire quelque chose comme ceci:

let createUser = (() => { 
    let newUser = { 
    firstName: 'Test', 
    lastName: 'User', 
    email: '[email protected]' 
    }; 

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

Cependant, ce style fait de placer les entrées d'objet ne fonctionnent pas et renvoie une erreur de demande incorrecte. Voici quelle partie de l'objet d'erreur renvoyé lit:

enter image description here

Toutes les idées pourquoi cela ne fonctionne pas? Merci d'avance!

Répondre

6

Il semblerait qu'il y ait un problème avec votre entrée JSON. Il peut s'agir d'une combinaison de sauts de ligne et de citations qui ne sont pas correctement analysées sur le serveur.

Cependant, je ne recommanderais toujours pas d'ajouter vos variables comme cela dans votre requête GraphQL. Vous devriez faire quelque chose comme ceci:

let createUser = (() => { 
    let newUser = { 
    firstName: 'Test', 
    lastName: 'User', 
    email: '[email protected]' 
    }; 

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

Vous pouvez consulter un autre simple example here à la façon dont vous pouvez exécuter une mutation sur Scaphold pour créer un utilisateur avec query et variables divisé en.

Espérons que cela aide!

+0

Merci bourgeon, va l'essayer! @vince – Thomas

+0

Hey @vince, de toute façon pour nettoyer la réponse que je veux revenir? Dire que je voulais id, prénom, lastName, facebookUID, email, etc. retourné après la création? Qu'est-ce que tu penses? – Thomas

+0

Dans ce cas, vous pouvez toujours retourner plus de champs. À l'heure actuelle, la requête renvoie «id» et «firstName», mais vous pouvez également continuer à ajouter à cette liste et inclure 'lastName',' facebookUID', 'email', etc. – vince