Les assertions JSON pour PHPUnit incluent des traits/méthodes pour vous aider à valider vos données JSON via diverses méthodes.
foo.bar[3]
) $ composer require estahn/phpunit-json-assertions --dev
ou dans votre composer.json
:
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
Affirmer | Description | Disponible en |
---|---|---|
assertJsonMatchesSchema | Affirme que le contenu json est valide selon le fichier de schéma fourni | Tous |
assertJsonMatchesSchemaString | Affirme que le contenu json est valide selon la chaîne de schéma fournie | Tous |
assertJsonValueEquals | Affirme si la valeur récupérée avec l'expression est égale à la valeur attendue | Tous |
assertJsonValueEquals | Affirme si la valeur récupérée avec l'expression est égale à la valeur attendue | Tous |
assertJsonResponse | Affirme qu'une réponse est réussie et de type json | Symfony |
Vous pouvez utiliser la version trait
ou 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 );
}
}
Si vous ne souhaitez pas utiliser le trait
vous pouvez utiliser la classe fournie qui s'étend de PHPUnit_Framework_TestCase
. Vous pouvez soit étendre votre scénario de test, soit utiliser les méthodes statiques comme ci-dessous.
<?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 );
}
}
Le stockage de schéma de justinrainbow/json-schema
permet d'enregistrer des schémas qui remplaceront efficacement l'emplacement réel du schéma.
Exemple:
{ "$ref" : " https://iglu.foobar.com/myschema.json#/definitions/positiveInteger " }
Le résolveur récupérera le schéma de ce point de terminaison et fera correspondre le document JSON avec celui-ci. En utilisant le stockage de schéma, vous pouvez remplacer ce comportement.
$ schemastorage -> addSchema ( ' https://iglu.foobar.com/myschema.json ' , ( object )[ ' type ' => ' string ' ]);
Une fois cela en place, le résolveur prendra le schéma déjà en place sans le télécharger à nouveau.
<?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
fournit des extensions pour une gestion plus simple dans différents cas d'utilisation.
L'extension EnricoStahnJsonAssertExtensionSymfony
permet de transmettre l'objet de réponse réel généré par le framework symfony et s'occupe de la partie décodage.
AVANT:
use EnricoStahn JsonAssert Assert as JsonAssert ;
// ...
$ content = $ response -> getContent ();
$ json = json_decode ( $ content );
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ json );
APRÈS:
use EnricoStahn JsonAssert Extension Symfony as JsonAssert ;
// ...
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ response );
Pour exécuter la suite de tests, vous avez besoin de composer.
$ composer install
$ bin/phpunit
La bibliothèque phpunit-json-assertions est sous licence MIT.