2017-05-11 3 views
4

Ich teste meine GraphQL API, aber ich möchte sie ein wenig aufräumen. Es ist erwähnenswert, ich verwende chai-http für die Netzwerkanforderungen. Hier ist, was ich gerade tun (das funktioniert):Testen von GraphQL API

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

Aber ich möchte, dass es reinigen etwas nach oben und etwas tun, wie folgt aus:

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

aber dieser Stil hat der Platzierung Die Objekteingaben funktionieren nicht und geben einen fehlerhaften Anforderungsfehler zurück. Hier ist, was Teil des zurückgegebenen Fehlerobjekts lautet:

enter image description here

Irgendwelche Ideen, warum dies nicht funktioniert? Danke im Voraus!

Antwort

6

Sieht aus wie ein Problem mit Ihrer JSON-Eingabe dort ist. Es könnte eine Kombination aus Zeilenumbrüchen und Anführungszeichen sein, die nicht korrekt auf dem Server analysiert wird.

Ich würde jedoch immer noch nicht empfehlen, Ihre Variablen in Ihrer GraphQL-Abfrage einzubinden. Sie sollten so etwas wie dies stattdessen tun: simple example here als um eine andere

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

überprüfen Sie, wie Sie eine Mutation auf Scaphold ausführen kann ein Benutzer mit query und variables aufzuschlüsseln zu erstellen.

Hoffe, das hilft!

+0

Danke Knospe, werde es ausprobieren! @vince – Thomas

+0

Hey @vince, sowieso die Antwort aufzuräumen ich will zurück? Sag ich wollte ID, Vorname, Nachname, FacebookUID, E-Mail, etc .. zurückgegeben nach der Erstellung? Was denken Sie? – Thomas

+0

In diesem Fall könnten Sie immer nur mehr Felder zurückgeben. Im Moment gibt die Abfrage 'id' und 'firstName' zurück, aber Sie können auch zu dieser Liste hinzufügen und 'lastName',' facebookUID', 'email', usw. hinzufügen. – vince