Утверждения JSON для PHPUnit включают в себя признаки/методы, помогающие проверять данные JSON различными методами.
foo.bar[3]
) $ composer require estahn/phpunit-json-assertions --dev
или в вашем composer.json
:
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
Утверждать | Описание | Доступно в |
---|---|---|
AssertJsonMatchesSchema | Утверждает, что содержимое json допустимо в соответствии с предоставленным файлом схемы. | Все |
AssertJsonMatchesSchemaString | Утверждает, что содержимое json допустимо в соответствии с предоставленной строкой схемы. | Все |
утверждатьJsonValueEquals | Проверяет, соответствует ли значение, полученное с помощью выражения, ожидаемому значению. | Все |
утверждатьJsonValueEquals | Проверяет, соответствует ли значение, полученное с помощью выражения, ожидаемому значению. | Все |
утверждатьJsonResponse | Утверждает, что ответ успешен и имеет тип json. | Симфония |
Вы можете использовать версию trait
или class
.
<?php
namespace EnricoStahn JsonAssert Tests ;
use EnricoStahn JsonAssert Assert as JsonAssert ;
class MyTestCase extends PHPUnit_Framework_TestCase
{
use JsonAssert;
public function testJsonDocumentIsValid ()
{
// my-schema.json
//
// {
// "type" : "object",
// "properties" : {
// "foo" : {
// "type" : "integer"
// }
// },
// "required" : [ "foo" ]
// }
$ json = json_decode ( ' {"foo":1} ' );
$ this -> assertJsonMatchesSchema ( $ json , ' ./my-schema.json ' );
$ this -> assertJsonValueEquals ( 1 , ' * | [0] ' , $ json );
}
}
Если вы не хотите использовать этот trait
, вы можете использовать предоставленный класс, который расширяется от PHPUnit_Framework_TestCase
. Вы можете либо расширить свой тестовый пример, либо использовать статические методы, как показано ниже.
<?php
namespace EnricoStahn JsonAssert Tests ;
use EnricoStahn JsonAssert AssertClass as JsonAssert ;
class MyTestCase extends PHPUnit_Framework_TestCase
{
public function testJsonDocumentIsValid ()
{
// my-schema.json
//
// {
// "type" : "object",
// "properties" : {
// "foo" : {
// "type" : "integer"
// }
// },
// "required" : [ "foo" ]
// }
$ json = json_decode ( ' {"foo":1} ' );
JsonAssert:: assertJsonMatchesSchema ( $ json , ' ./my-schema.json ' );
JsonAssert:: assertJsonValueEquals ( 1 , ' * | [0] ' , $ json );
}
}
Хранилище схем justinrainbow/json-schema
позволяет регистрировать схемы, которые будут эффективно переопределять фактическое местоположение схемы.
Пример:
{ "$ref" : " https://iglu.foobar.com/myschema.json#/definitions/positiveInteger " }
Резолвер получит схему из этой конечной точки и сопоставит с ней документ JSON. Используя хранилище схемы, вы можете переопределить это поведение.
$ schemastorage -> addSchema ( ' https://iglu.foobar.com/myschema.json ' , ( object )[ ' type ' => ' string ' ]);
При этом распознаватель будет использовать уже имеющуюся схему, не загружая ее повторно.
<?php
namespace EnricoStahn JsonAssert Tests ;
use EnricoStahn JsonAssert AssertClass as JsonAssert ;
class MyTestCase extends PHPUnit_Framework_TestCase
{
public function setUp ()
{
self :: $ schemaStorage = new SchemaStorage ();
self :: $ schemaStorage -> addSchema ( ' <id> ' , obj);
. . .
}
public function testJsonDocumentIsValid ()
{
// my-schema.json
//
// {
// "type" : "object",
// "properties" : {
// "foo" : {
// "type" : "integer"
// }
// },
// "required" : [ "foo" ]
// }
$ json = json_decode ( ' {"foo":1} ' );
JsonAssert:: assertJsonMatchesSchema ( $ json , ' ./my-schema.json ' );
JsonAssert:: assertJsonValueEquals ( 1 , ' * | [0] ' , $ json );
}
}
phpunit-json-assertions
предоставляет расширения для упрощения обработки в различных случаях использования.
Расширение EnricoStahnJsonAssertExtensionSymfony
позволяет передавать фактический объект ответа, сгенерированный инфраструктурой Symfony, и берет на себя часть декодирования.
ДО:
use EnricoStahn JsonAssert Assert as JsonAssert ;
// ...
$ content = $ response -> getContent ();
$ json = json_decode ( $ content );
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ json );
ПОСЛЕ:
use EnricoStahn JsonAssert Extension Symfony as JsonAssert ;
// ...
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ response );
Для запуска набора тестов вам понадобится композитор.
$ composer install
$ bin/phpunit
Библиотека phpunit-json-assertions лицензирована MIT.