Отправьте запрос POST на сервер apollo с именем операции и переменными

Я следую этому документу https://www.apollographql.com/docs/apollo-server/requests.html#postRequests и пытаюсь отправить запрос POST на сервер apollo.

тестовый код:

it('should get author correctly', () => {
    const body = {
      query: `
        query {
          getAuthor($id: Int!) {
            name
          }
        }
      `,
      // operationName: 'query author',
      variables: {
        id: 1
      }
    };
    return rp.post(body).then(res => {
      expect(res.data.getAuthor.name).to.equal('lin');
    });
  });

rp.js:

const requestPromise = require('request-promise');
const { PORT } = require('./config');

const GRAPHQL_ENDPOINT = `http://localhost:${PORT}/graphql`;

function rp(options) {
  function post(body) {
    return requestPromise(GRAPHQL_ENDPOINT, {
      method: 'POST',
      body,
      json: true,
      headers: {
        'Content-Type': 'application/json'
      }
    });
  }

  return {
    post
  };
}

module.exports = rp;

Когда я запускаю команду npm test, появляется ошибка:

graphql test suites
Go to http://localhost:3000/graphiql to run queries!
    ✓ t0
    1) should get author correctly


  1 passing (79ms)
  1 failing

  1) graphql test suites
       should get author correctly:
     StatusCodeError: 400 - {"errors":[{"message":"Syntax Error: Expected Name, found $","locations":[{"line":3,"column":21}]}]}
      at new StatusCodeError (node_modules/request-promise-core/lib/errors.js:32:15)
      at Request.plumbing.callback (node_modules/request-promise-core/lib/plumbing.js:104:33)
      at Request.RP$callback [as _callback] (node_modules/request-promise-core/lib/plumbing.js:46:31)
      at Request.self.callback (node_modules/request/request.js:186:22)
      at Request.<anonymous> (node_modules/request/request.js:1163:10)
      at IncomingMessage.<anonymous> (node_modules/request/request.js:1085:12)
      at endReadableNT (_stream_readable.js:1106:12)
      at process._tickCallback (internal/process/next_tick.js:178:19)
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
2
0
1 864
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Формат вашего запроса недействителен. На самом деле есть две ошибки. Во-первых, переменные определяются в самом начале операции (рядом с ключевым словом query или mutation). И, во-вторых, если вы определяете переменную, вы должны ее использовать. Итак, ваш запрос должен выглядеть примерно так:

query($id: Int!) {
  getAuthor(id: $id) {
    name
  }
}

Другие вопросы по теме