2

I've created an interface type, like:

module UserErrorType
  include Types::BaseInterface

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

And a query that looks like:

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

When I run this locally everything works fine, I'm able to resolve my derived types and get into the resolve_type method.

When I run in rspec:

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

I get the following error:

GraphQL::RequiredImplementationMissingError: schema contains Interfaces or Unions, so you must define a resolve_type -> (obj, ctx) { ... } function

From my understanding of the error message it wants me to put the resolve_type method directly on the Schema object though I should be able to define it in the definition_methods directly in the interface as above.

tom
  • 21
  • 3

1 Answers1

0

I'm not sure if this is standard graphql-ruby practice or a relic of our implementation, but we have a test support file which will redefine our schema (this could be due to us being built inside of a Rails engine and stitching our schemas together). In this support file, we had something like:

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

Adding the unused resolve_type here gets around this problem:

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

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

This implementation is not used (it uses the interface-specific resolve_type method) but satisfies the requirements of the validation check.

tom
  • 21
  • 3