Моя цель - протестировать типы моей схемы GraphQL в ruby, я использую гем graphql-ruby.
Я не смог найти для этого лучшей практики, поэтому мне интересно, как лучше всего протестировать поля и типы схемы.
Гем рекомендует не тестировать схему напрямую 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, любые критические изменения нарушат набор тестов после обновления.
- Мы повторяем код, тесты утверждают те же поля в типе.
- Написание этих тестов утомительно, и это снижает вероятность их написания разработчиками.