我的目标是在 ruby 中测试我的 GraphQL 模式的类型,我使用的是 graphql-ruby gem。
我找不到任何最佳实践,所以我想知道测试模式的字段和类型的最佳方法是什么。
gem 建议不要直接测试架构http://graphql-ruby.org/schema/testing.html但我仍然发现能够知道架构何时意外更改很有价值。
有这样的类型:
module Types
class DeskType < GraphQL::Schema::Object
field :id, ID, 'Id of this Desk', null: false
field :location, String, 'Location of the Desk', null: false
field :custom_id, String, 'Human-readable unique identifier for this desk', null: false
end
end
我的第一种方法是fields
在 GraphQL::Schema::Object 类型中使用哈希,例如:
Types::DeskType.fields['location'].type.to_s => 'String!'
创建一个 RSpec 匹配器,我可以想出如下所示的测试:
RSpec.describe Types::DeskType do
it 'has the expected schema fields' do
fields = {
'id': 'ID!',
'location': 'String!',
'customId': 'String!'
}
expect(described_class).to match_schema_fields(fields)
end
end
这种方法虽然有一些缺点:
- 匹配器中的代码取决于类 GraphQL::Schema::Object 的实现,任何重大更改都会在更新后破坏测试套件。
- 我们在重复代码,测试断言类型中的相同字段。
- 编写这些测试变得乏味,这使得开发人员不太可能编写它们。