在 GraphQL Schema 上重新定义自定义订阅

Redefine custom subscriptions on GraphQL Schema

我们面临一个问题,我们想在运行中替换 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 并使用一些外部依赖关系到 store/trigger 订阅。在测试时,我们不一定要处理这些依赖关系,因此我们想用一些不需要相同外部依赖关系的模拟或实现替换那里的订阅。例如,我想这样做:

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

 ...
end

但是,这不会从架构中删除我们的 CustomSubscriptions。我试图更新模式以允许设置订阅实例,但到目前为止没有成功。

有没有办法实现我想要的?我错过了一些 setter/helper 方法?

在维护者的帮助下找到了解决方案。可以通过 graphql_definition 访问模式的单例实例。然后可以根据需要修改该实例。

例如,要根据需要设置订阅实例,可以使用:

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