在 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
我们面临一个问题,我们想在运行中替换 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