kunicmarko / graphql-test
GraphQL Test Cases
Installs: 56 958
Dependents: 0
Suggesters: 0
Security: 0
Stars: 13
Watchers: 4
Forks: 7
Open Issues: 1
Requires
- php: ^7.1
Requires (Dev)
- laravel/laravel: ^5.6
- laravel/lumen-framework: ^5.6
- symfony/browser-kit: ^3.4 || ^4.0 || ^4.1
- symfony/framework-bundle: ^3.4 || ^4.0 || ^4.1
- symfony/phpunit-bridge: ^4.0
This package is auto-updated.
Last update: 2024-10-29 03:53:33 UTC
README
Makes testing your GraphQL queries and mutations easier.
Support for Symfony, Lumen and Laravel.
Documentation
Installation
1. Add dependency with composer
composer require --dev kunicmarko/graphql-test
If you are using Symfony you will have to install "symfony/browser-kit".
How to use
Depending on your framework, extend the correct TestCase
:
use KunicMarko\GraphQLTest\Bridge\Symfony\TestCase; use KunicMarko\GraphQLTest\Bridge\Lumen\TestCase; use KunicMarko\GraphQLTest\Bridge\Laravel\TestCase;
Everything you see in the next snippets is the same for all Test Cases.
In your tests you now have 2 additional helper methods:
public function query(QueryInterface $query, array $files = [], array $headers = []); public function mutation(MutationInterface $mutation, array $files = [], array $headers = [])
By default, endpoint is /graphql
, you can overwrite this by changing variable in your tests:
use KunicMarko\GraphQLTest\Bridge\Symfony\TestCase; class UserTest extends TestCase { public static $endpoint = '/'; }
There is a helper method that allows you to preset headers:
use KunicMarko\GraphQLTest\Bridge\Symfony\TestCase; class SettingsTest extends TestCase { protected function setUp() { $this->setDefaultHeaders([ 'Content-Type' => 'application/json', ]); } }
Examples
Query
use KunicMarko\GraphQLTest\Bridge\Symfony\TestCase; use KunicMarko\GraphQLTest\Operation\Query; class SettingsQueryTest extends TestCase { public static $endpoint = '/'; protected function setUp() { $this->setDefaultHeaders([ 'Content-Type' => 'application/json', ]); } public function testSettingsQuery(): void { $query = $this->query( new Query( 'settings', [], [ 'name', 'isEnabled', ], ) ); //Fetch response and do asserts } }
KunicMarko\GraphQLTest\Operation\Query
construct accepts 3 arguments:
- name of query (mandatory)
- parameters (optional)
- fields (optional)
Mutation
use KunicMarko\GraphQLTest\Bridge\Symfony\TestCase; use KunicMarko\GraphQLTest\Operation\Mutation; class SettingsMutationTest extends TestCase { public static $endpoint = '/'; protected function setUp() { $this->setDefaultHeaders([ 'Content-Type' => 'application/json', ]); } public function testSettingsMutation(): void { $mutation = $this->mutation( new Mutation( 'createSettings', [ 'name' => 'hide-menu-bar', 'isEnabled' => true, ], [ 'name', 'isEnabled', ], ) ); //Fetch response and do asserts } }
KunicMarko\GraphQLTest\Operation\Mutation
construct accepts 3 arguments:
- name of mutation (mandatory)
- parameters (optional)
- fields (optional)
If you have a Enum, Boolean or Array as an argument you can pass it as following:
use KunicMarko\GraphQLTest\Bridge\Symfony\TestCase; use KunicMarko\GraphQLTest\Operation\Mutation; use KunicMarko\GraphQLTest\Type\EnumType; use KunicMarko\GraphQLTest\Type\BooleanType; use KunicMarko\GraphQLTest\Type\ArrayType; class UserMutationTest extends TestCase { //... public function testUserMutation(): void { $mutation = $this->mutation( new Mutation( 'createUser', [ 'username' => 'kunicmarko20', 'salutation' => new EnumType('Mr'), 'enabled' => new BooleanType(true), 'roles' => new ArrayType(['ROLE_ADMIN', 'ROLE_TEST']), //.. ], [ 'username', 'salutation', ], ) ); //Fetch response and do asserts } }
Also, if you need a custom type you can always extend KunicMarko\GraphQLTest\Type\TypeInterface
and use your own Type instead.