我正在尝试测试使用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”}}}]] [{“ data”:{“ movies”:{“ data”:[]}}}]。无法断言false是 是的。
问题是我的数据结构与JSON's
结构不匹配。当我的数据位于Array
内时,JSON的数据位于Object
内,我不知道如何使其匹配:
["data":{"movies":{"data":{"name":"Fast & Furious 8"}}}]
[{"data":{"movies":{"data":[{"name":"Fast & Furious 8"}]}}}]
如何使我的数据结构与JSON的数据结构匹配,或者有更好的方法在流明上对GraphQL响应进行单元测试?
答案 0 :(得分:0)
您需要将'name' => 'Fast & Furious 8'
包装在它自己的数组中,例如:
以下内容:
$array = [
'data' => [
'movies' => [
'data' => [
['name' => 'Fast & Furious 8']
]
]
]
];
应输出:
{"data":{"movies":{"data":[{"name":"Fast & Furious 8"}]}}}