Как протестировать ответы GraphQL на Lumen? - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь протестировать API, который я создал с Lumen (PHP), но я застрял на unit test моих GraphQL откликах`.

Вот что я пробовал:

class MovieQueryTest extends Tests\GraphQLTestCase
{
    use DatabaseMigrations;

    public function testCanSearch()
    {
        Movie::create([
            'name' => 'Fast & Furious 8',
            'alias' => 'Fast and Furious 8',
            'year' => 2016
        ]);

        $response = $this->post('/graphql/v1', [
            'query' => '{movies(search: "Fast & Furious"){data{name}}}'
        ]);

        $response->seeJson([
            'data' => [
                'movies' => [
                    'data' => [
                        'name' => 'Fast & Furious 8'
                    ]
                ]
            ]
        ]);
    }
}

Вот что я получил:

PHPUnit 7.5.6 от Себастьяна Бергманна и авторов.

F ..... 6/6 (100%)

Время: 690 мс, Память: 24,00 МБ

Произошел 1 сбой:

1) MovieQueryTest :: testCanSearch Невозможно найти фрагмент JSON ["data": {"movies ": {" data ": {" name ":" Fast & Furious "}}}] внутри [{" data ": {" movies ": {" data ": []}}}].Не удалось подтвердить, что значение false равно true.

Проблема заключается в том, что моя структура данных не соответствует структуре JSON's.Пока мои данные находятся внутри Array, данные JSON находятся внутри Object, и я не могу понять, как сделать так, чтобы они соответствовали:

  • ["data":{"movies":{"data":{"name":"Fast & Furious 8"}}}]
  • [{"data":{"movies":{"data":[{"name":"Fast & Furious 8"}]}}}]

Как сделать так, чтобы моя структура данных соответствовала структуре данных JSON, или есть лучший способ модульного тестирования ответов GraphQL на Lumen?

1 Ответ

0 голосов
/ 19 марта 2019

Вам нужно обернуть 'name' => 'Fast & Furious 8' внутри собственного массива, например:

Следующее:

$array = [
    'data' => [
        'movies' => [
            'data' => [
                ['name' => 'Fast & Furious 8']
            ]
        ]
    ]
];

Должен вывести:

{"data":{"movies":{"data":[{"name":"Fast & Furious 8"}]}}}
...