Как передать аргументы запроса в graphql-tool? - PullRequest
0 голосов
/ 29 января 2019

Я использую graphql-tool для макетирования данных для тестирования.

Я надеюсь смоделировать при выборе пользователя, он открывает страницу сведений и показывает информацию о компании пользователя.

Запрос

const query = `
  query User($id: ID!) {
    user(id: $id) {
      id
      company
    }
  }
`;

Макет сервера

import { addMockFunctionsToSchema } from 'graphql-tools';
import casual from 'casual';

const allUserIds = ['u1', 'u2', 'u3'];

const mocks = {
  User: () => ({
    id: casual.random_element(allUserIds),
    name: casual.name,
    company: casual.company_name
  })
};

addMockFunctionsToSchema({ schema, mocks });

Однако, прямо сейчас, когда я запрашиваю с идентификатором аргумента'u1', он вернет случайный идентификатор пользователя, например 'u2', что немного затрудняет его показ в передней части.

Я думал, что смогу сделать что-то подобное ниже, но, оказывается, яя не правuser - это undefined в приведенном ниже коде.

const mocks = {
  User: (user) => ({
    id: user.id || casual.random_element(allUserIds),
    name: casual.name,
    company: casual.company_name
  })
};

Есть ли способ передать аргументы запроса в graphql-tools?Спасибо

1 Ответ

0 голосов
/ 29 января 2019

Зависит от того, насколько последовательными должны быть данные теста.Если все, что вас волнует, это то, что id остается согласованным с вашим аргументом запроса, вот что вы можете сделать:

const mocks = {
  Query: () => ({
    user: (root, user) => ({
      id: user.id || casual.random_element(allUserIds),
      name: casual.name,
      company: casual.company_name
    })
  })
};

Как упомянуто здесь в документации, фиктивные функциитак же, как распознаватели GraphQL.Таким образом, параметры функций следуют в том же порядке root, arguments, context, который доступен для каждого поля.

Пожалуйста, смотрите здесь песочницу с кодом для демонстрации.

Это гарантирует, что когда вы запрашиваете пользователя с идентификатором u1, вы всегда получаете объект данных пользователя с егоid = "u1" со случайно сгенерированными полями компании и имени.Однако, если вы хотите, чтобы весь пользовательский объект был постоянным на протяжении всего теста, вам нужно будет создать фиктивные пользовательские данные вне фиктивных функций и соответственно запросить и отфильтровать данные.

...