【问题标题】:How to unit test GraphQL responses on Lumen?如何在 Lumen 上对 GraphQL 响应进行单元测试?
【发布时间】:2019-07-31 15:46:28
【问题描述】:

我正在尝试测试使用 Lumen (PHP) 构建的 API,但我被困在 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'
                    ]
                ]
            ]
        ]);
    }
}

这是我得到的:

Sebastian Bergmann 及其贡献者编写的 PHPUnit 7.5.6。

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

时间:690 毫秒,内存:24.00 MB

有 1 次失败:

1) MovieQueryTest::testCanSearch 找不到 JSON 片段 ["data":{"movies":{"data":{"name":"Fast & Furious"}}}] 内 [{“数据”:{“电影”:{“数据”:[]}}}]。未能断言 false 是 真的。

问题是我的数据结构与JSON's 结构不匹配。虽然我的数据在 Array 内,但 JSON 的数据在 Object 内,我不知道如何匹配:

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

如何使我的数据结构与 JSON 的数据结构相匹配,或者有更好的方法在 Lumen 上对 GraphQL 响应进行单元测试?

【问题讨论】:

  • e200,如果下面的答案有帮助或者您需要进一步的帮助,请告诉我们。

标签: json api phpunit graphql lumen


【解决方案1】:

您需要将'name' => 'Fast & Furious 8' 包裹在它自己的数组中,例如:

以下内容:

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

应该输出:

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

【讨论】:

    猜你喜欢
    • 2018-04-02
    • 2017-08-17
    • 2018-07-16
    • 2019-01-15
    • 2021-07-23
    • 2014-01-30
    • 2018-12-19
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多