Я использую Codeception для тестирования моего проекта JSON API laravel. Я использую функции JSONPath для кодирования, чтобы проверить структуру ответов. Я не могу разобрать выражение, когда оно содержит дефис. Json Path использует дефис в качестве оператора вычитания, но в этом случае я использовал его как строку. Я знаю, что размещение подстроки, содержащей hyohen внутри двойных кавычек («») внутри всего выражения в одинарных кавычках, должно сделать это. но это не работает.
вот функция в моем наборе тестов API SomeTestCest.php
public function someTest(ApiTester $I)
{
$I->sendGET('/teachers/122');
//used double quotes as it contains hyphen
$I->seeResponseJsonMatchesJsonPath('$.data.[*].relationships."high-schools"');
}
Вот пример ответа на запрос get в тесте.
{
"data": {
"type": "teachers",
"id": "122",
"attributes": {
"fullname": "Rhoda Frami",
},
"relationships": {
"high-schools": {
"data": null
},
"subjects": {
"data": null
}
},
"links": {
"self": "http:\/\/api.project:81\/teachers\/122"}
}
}
когда я запускаю тесты, используя следующие
php codecept run tests/api/resources/SomeTestCest.php --steps --verbose
это выдает ошибку
There was 1 failure:
---------
1) SomeTestCest:
Test tests/api/resources/SomeTestCest.php:someTest
Step See response json matches json path "$.data.[*].relationships."high-schools""Fail Received JSON did not match the JsonPath `$.data.[*].relationships."high-schools"`.
Json Response:
{
"data": {
"type": "teachers",
"id": "122",
"attributes": {
"fullname": "Rhoda Frami",
},
"relationships": {
"high-schools": {
"data": null
},
"subjects": {
"data": null
}
},
"links": {
"self": "http:\/\/api.project:81\/teachers\/122"}
}
}
я пробовал следующие способы, а также
$I->seeResponseJsonMatchesJsonPath("$.data.[*].relationships.'high-schools'");
$I->seeResponseJsonMatchesJsonPath('$.data.[*].relationships."high-schools"');
$I->seeResponseJsonMatchesJsonPath('$.data.[*].relationships.high-schools');
$I->seeResponseJsonMatchesJsonPath("$.data.[*].relationships.high-schools");
и это либо эта ошибка. Я знаю его, потому что дефис не анализируется, как предполагалось.
There was 1 error:
---------
1) SomeTestCest:
Test tests/api/resources/SomeTestCest.php:SomeTest
[Flow\JSONPath\JSONPathException] Unable to parse token high-schools in expression: .data.[*].relationships.high-schools
Итак, я проверил с базовым пакетом JSONPath который используется кодовым восприятием и обнаружил, что он работает как задумано.
$data = ['people' => [['high-schools' => 'Joe'], ['high-schools' => 'Jane'], ['high-schools' => 'John']]];
$result = (new \Flow\JSONPath\JSONPath($data))->find('$.people.*."high-schools"');
print_r($result);
вот результат
Flow\JSONPath\JSONPath Object
(
[data:protected] => Array
(
[0] => Joe
[1] => Jane
[2] => John
)
[options:protected] => 0
)
=> true
Поэтому мой вопрос заключается в том, как проанализировать строку json, которая содержит дефис (-), чтобы проверить структуру json, используя Codeception с Json Path?
Спасибо
Задача ещё не решена.
Других решений пока нет …