GraphQL API Testing

I am testing my GraphQL API, but I would have cleaned it up a bit. It is worth noting that I use chai-httpfor network requests. Here is what I am doing now (what works):

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

However, I would like to clean it up a bit and do something like this:

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

However, this style makes the placement of object inputs not working and returns a bad request error. Here is what part of the returned error object reads:

enter image description here

Any ideas why this is not working? Thanks in advance!

+4
source share
1 answer

, JSON. , .

, - , GraphQL. - :

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, query variables .

, !

+6

Source: https://habr.com/ru/post/1676943/


All Articles