Не удается разрешить тип интерфейса в схеме GraphQL только в тесте - PullRequest
1 голос
/ 31 марта 2020

Я создал тип интерфейса, например:

module UserErrorType
  include Types::BaseInterface

  definition_methods do
    def resolve_type(object, _ctx)
      ...
    end
  end
end

И запрос, который выглядит следующим образом:

query {
  thing {
    errors {
      code
      message
      ... on SomeDerivedType {
        blah
      }
    }
  }
}

Когда я запускаю это локально, все работает нормально, я в состоянии разрешить мои производные типы и получить метод resolve_type.

Когда я запускаю в rspe c:

describe UserErrorType, type: :graphql_object do
  subject { execute(query, context) }
end

, я получаю следующую ошибку:

GraphQL :: RequiredImplementationMissingError: схема содержит интерфейсы или объединения, поэтому вы должны определить resolve_type -> (obj, ctx) { ... } функцию

Исходя из моего понимания сообщения об ошибке, он хочет, чтобы я добавил метод resolve_type непосредственно на объекте Schema, хотя я должен иметь возможность определить его в definition_methods непосредственно в интерфейсе, как указано выше.

1 Ответ

0 голосов
/ 31 марта 2020

Я не уверен, является ли это стандартной graphql-ruby практикой или версией c нашей реализации, но у нас есть тестовый файл поддержки, который переопределит нашу схему (это может быть из-за того, что мы построены внутри Rails движок и сшивание наших схем вместе). В этом файле поддержки у нас было что-то вроде:

@schema = OurEngine::Schema.define do
  query(query_type)
end

Добавление неиспользованного resolve_type позволяет обойти эту проблему:

@schema = OurEngine::Schema.define do
  query(query_type)

  resolve_type -> (_type, _obj, _ctx) do
    raise NoMethodError, 'Need to implement `resolve_type`'
  end
end

Эта реализация не используется (используется интерфейс -specifi c resolve_type), но удовлетворяет требованиям проверки.

...