0

我们正面临一个问题,我们希望动态替换 GraphQL Schema 上的自定义订阅对象(主要用于测试)。我们目前有以下架构:

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从模式中删除。我试图更新架构以允许设置订阅实例,但到目前为止没有成功。

有没有办法完成我所追求的?我错过了一些 setter/helper 方法?

4

1 回答 1

0

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

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

@subscriptions  = MyTestSubscription.new(schema: MeistertaskSchema.graphql_definition)
MeistertaskSchema.graphql_definition.subscriptions = @subscriptions
于 2020-01-22T16:30:46.437 回答