Переопределение пользовательских подписок в схеме GraphQL - PullRequest
0 голосов
/ 22 января 2020

Мы столкнулись с проблемой, когда мы хотели бы заменить объект пользовательской подписки в схеме GraphQL на лету (в основном для тестирования). В настоящее время у нас есть следующая схема:

class MySchema < GraphQL::Schema
  query CustomQueryType
  mutation CustomMutationType
  subscription CustomSuscriptionType

  use CustomSubscriptions # We want to replace this on the fly
end

CustomSubscriptions сама является производной от GraphQL::Subscriptions и использует некоторые внешние зависимости для хранения / запуска подписок. Во время тестирования мы не обязательно хотим иметь дело с этими зависимостями, поэтому мы хотели бы заменить подписки там на некоторые макеты или некоторые реализации, которые не требуют таких же внешних зависимостей. Например, я хотел бы сделать:

class SubscriptionsTest < ActiveSupport::TestCase
 def setup
   mySchema.use(MyTestSubscriptions) # This doesn't work :(
 end

 ...
end

Однако это не удалит наш CustomSubscriptions из схемы. Я попытался обновить схему, чтобы разрешить установку экземпляра подписки, но пока безуспешно.

Есть ли способ сделать sh то, что я после? Какой-то метод сеттера / помощника, который я пропустил?

1 Ответ

0 голосов
/ 22 января 2020

Нашел решение с некоторой помощью от сопровождающего. Можно получить доступ к одноэлементному экземпляру схемы через graphql_definition. Затем можно изменить этот экземпляр по своему желанию.

Например, для установки нужного экземпляра подписки можно использовать:

@subscriptions  = MyTestSubscription.new(schema: MeistertaskSchema.graphql_definition)
MeistertaskSchema.graphql_definition.subscriptions = @subscriptions
...