2017-05-11 16 views
4

私はGraphQL APIをテストしていますが、少し掃除したいと思います。ネットワークリクエストにchai-httpを使用しています。ここで私は現在、(働く)やってんだよ: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); 
     }) 
    }); 
}); 

しかし、私は少しそれをクリーンアップし、このような何かをしたいと思います:

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

しかし、このスタイルは、置くことのありませんオブジェクトの入力が機能せず、不正な要求エラーが返されます。

enter image description here

任意のアイデアをなぜこれが動作しません。ここで読み込む返されるエラーオブジェクトのどの部分ですか?前もって感謝します!

答えて

6

JSON入力に問題があるようです。あなたの改行と、サーバー上で適切に解析されていない見積もりとの組み合わせかもしれません。

しかし、私はあなたのGraphQLクエリのような変数をインライニングすることは推奨しません。代わりに、このような何かを行う必要があります。

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

あなたがqueryvariablesアウト分割してユーザーを作成するScapholdに変異を実行できる方法についての他のsimple example hereをチェックアウトすることができます。

希望すると便利です。

+0

おかげで、それを試してみましょう! @vince – Thomas

+0

ちょっと@vince、とにかく私は戻ってほしい返答をきれいにするには?私がid、firstName、lastName、facebookUID、emailなどを望んでいたとしましょう。作成後に返されましたか?どう思いますか? – Thomas

+0

その場合、常にもっと多くのフィールドを返すことができます。今、クエリは 'id'と' firstName'を返していますが、そのリストに続けて 'lastName'、' facebookUID'、 'email'などを含めることもできます – vince

関連する問題