2017-05-11 1 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

헤이 @ 빈스, 어쨌든 내가 원하는 응답을 정리할 수 있습니까? id, firstName, lastName, facebookUID, email 등을 원한다고 가정 해 봅시다. 어떻게 생각해? – Thomas

+0

그럴 경우 항상 더 많은 필드를 반환 할 수 있습니다. 지금 쿼리는'id'와'firstName'을 반환하지만, 그 목록에 계속 추가하고'lastName','facebookUID','email' 등을 포함 할 수 있습니다. – vince

관련 문제