JSONPath не может проанализировать, когда выражение содержит дефис

Я использую 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?

Спасибо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]