'query', 'fields' => function () { return [ 'lazyInterface' => [ 'type' => $this->getLazyInterfaceType(), 'resolve' => function() { return []; } ] ]; } ]); $this->schema = new Schema(['query' => $query, 'types' => [$this->getTestObjectType()]]); } /** * Returns the LazyInterface * * @return InterfaceType */ protected function getLazyInterfaceType() { if (!$this->lazyInterface) { $this->lazyInterface = new InterfaceType([ 'name' => 'LazyInterface', 'resolveType' => function() { return $this->getTestObjectType(); }, 'resolve' => function() { return []; } ]); } return $this->lazyInterface; } /** * Returns the test ObjectType * @return ObjectType */ protected function getTestObjectType() { if (!$this->testObject) { $this->testObject = new ObjectType([ 'name' => 'TestObject', 'fields' => [ 'name' => [ 'type' => Type::string(), 'resolve' => function() { return 'testname'; } ] ], 'interfaces' => [$this->getLazyInterfaceType()] ]); } return $this->testObject; } /** * Handles execution of a lazily created interface */ public function testReturnsFragmentsWithLazyCreatedInterface() { $request = ' { lazyInterface { ... on TestObject { name } } } '; $expected = [ 'data' => [ 'lazyInterface' => [ 'name' => 'testname' ] ] ]; $this->assertEquals($expected, Executor::execute($this->schema, Parser::parse($request))->toArray()); } }