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