JSON-Assertionen für PHPUnit umfassen Merkmale/Methoden, die Ihnen bei der Validierung Ihrer JSON-Daten durch verschiedene Methoden helfen.
foo.bar[3]
). $ composer require estahn/phpunit-json-assertions --dev
oder in Ihrer composer.json
:
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
Behaupten | Beschreibung | Verfügbar in |
---|---|---|
behauptenJsonMatchesSchema | Bestätigt, dass der JSON-Inhalt gemäß der bereitgestellten Schemadatei gültig ist | Alle |
behauptenJsonMatchesSchemaString | Bestätigt, dass der JSON-Inhalt gemäß der bereitgestellten Schemazeichenfolge gültig ist | Alle |
behauptenJsonValueEquals | Stellt fest, ob der mit dem Ausdruck abgerufene Wert dem erwarteten Wert entspricht | Alle |
behauptenJsonValueEquals | Stellt fest, ob der mit dem Ausdruck abgerufene Wert dem erwarteten Wert entspricht | Alle |
behauptenJsonResponse | Bestätigt, dass eine Antwort erfolgreich ist und vom Typ JSON ist | Symfony |
Sie können entweder die trait
oder class
verwenden.
<?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 );
}
}
Falls Sie das trait
nicht verwenden möchten, können Sie die bereitgestellte Klasse verwenden, die von PHPUnit_Framework_TestCase
ausgeht. Sie können entweder Ihren Testfall erweitern oder die statischen Methoden wie unten verwenden.
<?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 );
}
}
Der Schemaspeicher von justinrainbow/json-schema
ermöglicht die Registrierung von Schemata, die den tatsächlichen Schemaspeicherort effektiv überschreiben.
Beispiel:
{ "$ref" : " https://iglu.foobar.com/myschema.json#/definitions/positiveInteger " }
Der Resolver ruft das Schema von diesem Endpunkt ab und gleicht das JSON-Dokument damit ab. Mithilfe des Schemaspeichers können Sie dieses Verhalten außer Kraft setzen.
$ schemastorage -> addSchema ( ' https://iglu.foobar.com/myschema.json ' , ( object )[ ' type ' => ' string ' ]);
Wenn dies vorhanden ist, übernimmt der Resolver das bereits vorhandene Schema, ohne es erneut herunterzuladen.
<?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
bietet Erweiterungen für eine einfachere Handhabung in verschiedenen Anwendungsfällen.
Die Erweiterung EnricoStahnJsonAssertExtensionSymfony
ermöglicht die Übergabe des eigentlichen vom Symfony-Framework generierten Antwortobjekts und übernimmt den Dekodierungsteil.
VOR:
use EnricoStahn JsonAssert Assert as JsonAssert ;
// ...
$ content = $ response -> getContent ();
$ json = json_decode ( $ content );
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ json );
NACH:
use EnricoStahn JsonAssert Extension Symfony as JsonAssert ;
// ...
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ response );
Um die Testsuite auszuführen, benötigen Sie Composer.
$ composer install
$ bin/phpunit
Die phpunit-json-assertions-Bibliothek ist unter der MIT-Lizenz lizenziert.