node.js - 测试 GraphQL API

标签 node.js mocha.js chai graphql chai-http

我正在测试我的 GraphQL API,但我想稍微清理一下它。值得注意的是,我使用 chai-http 进行网络请求。这是我目前正在做的事情(有效):

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

但是,我想稍微清理一下并做这样的事情:

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

但是,这种放置对象输入的样式不起作用并返回错误请求错误。以下是返回的错误对象的部分内容:

enter image description here

知道为什么这行不通吗?提前致谢!

最佳答案

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

您可以查看另一个simple example here关于如何在 Scaphold 上执行突变以创建具有 queryvariables 的用户。

希望这对您有所帮助!

关于node.js - 测试 GraphQL API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43921059/

相关文章:

javascript - 如何测量nodejs中异步函数的执行时间?

node.js - 如何测量使用 socket.io 内部传输的数据大小

javascript - attribute.js 中的 JSDOM 错误

javascript - Mocha 返回原型(prototype)方法未定义

angularjs - 如何在 Sinon JS 的单元测试中处理 sinon.stub().throws()

chai - 使用 chai 消除 no-unused-expressions linter 错误的好方法

sql-server - SQL Server 使用 mssql 查询导致 Node 应用程序崩溃

javascript - 'session' is undefined - Este JS/Express/Redis for session store

javascript - 如何在 Cypress 中重复请求直到得到不同的响应

javascript - Mocha - Chai Unit Terst 报告生成 - NodeJS