Las aserciones JSON para PHPUnit incluyen rasgos/métodos para ayudar a validar sus datos JSON a través de varios métodos.
foo.bar[3]
) $ composer require estahn/phpunit-json-assertions --dev
o en tu composer.json
:
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
Afirmar | Descripción | Disponible en |
---|---|---|
afirmarJsonMatchesSchema | Afirma que el contenido json es válido según el archivo de esquema proporcionado | Todo |
afirmarJsonMatchesSchemaString | Afirma que el contenido json es válido según la cadena de esquema proporcionada | Todo |
afirmarJsonValueEquals | Afirma si el valor recuperado con la expresión es igual al valor esperado | Todo |
afirmarJsonValueEquals | Afirma si el valor recuperado con la expresión es igual al valor esperado | Todo |
afirmarJsonRespuesta | Afirma que una respuesta es exitosa y de tipo json | Symfony |
Puedes usar la versión trait
o 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 );
}
}
En caso de que no desee utilizar el trait
puede utilizar la clase proporcionada que se extiende desde PHPUnit_Framework_TestCase
. Puede ampliar su caso de prueba o utilizar los métodos estáticos como se muestra a continuación.
<?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 );
}
}
El almacenamiento de esquemas de justinrainbow/json-schema
permite registrar esquemas que anularán efectivamente la ubicación real del esquema.
Ejemplo:
{ "$ref" : " https://iglu.foobar.com/myschema.json#/definitions/positiveInteger " }
El solucionador obtendrá el esquema de este punto final y comparará el documento JSON con él. Al utilizar el almacenamiento de esquemas, puede anular este comportamiento.
$ schemastorage -> addSchema ( ' https://iglu.foobar.com/myschema.json ' , ( object )[ ' type ' => ' string ' ]);
Una vez implementado esto, el solucionador tomará el esquema que ya está implementado sin descargarlo nuevamente.
<?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
proporciona extensiones para un manejo más sencillo en diferentes casos de uso.
La extensión EnricoStahnJsonAssertExtensionSymfony
permite pasar el objeto de respuesta real generado por el marco Symfony y se encarga de la parte de decodificación.
ANTES:
use EnricoStahn JsonAssert Assert as JsonAssert ;
// ...
$ content = $ response -> getContent ();
$ json = json_decode ( $ content );
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ json );
DESPUÉS:
use EnricoStahn JsonAssert Extension Symfony as JsonAssert ;
// ...
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ response );
Para ejecutar el conjunto de pruebas, necesita Composer.
$ composer install
$ bin/phpunit
La biblioteca phpunit-json-assertions tiene licencia del MIT.