As asserções JSON para PHPUnit incluem características/métodos para ajudar a validar seus dados JSON por meio de vários métodos.
foo.bar[3]
) $ composer require estahn/phpunit-json-assertions --dev
ou no seu composer.json
:
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
Afirmar | Descrição | Disponível em |
---|---|---|
assertJsonMatchesSchema | Afirma que o conteúdo JSON é válido de acordo com o arquivo de esquema fornecido | Todos |
assertJsonMatchesSchemaString | Afirma que o conteúdo json é válido de acordo com a string do esquema fornecida | Todos |
assertJsonValueEquals | Afirma se o valor recuperado com a expressão é igual ao valor esperado | Todos |
assertJsonValueEquals | Afirma se o valor recuperado com a expressão é igual ao valor esperado | Todos |
assertJsonResponse | Afirma que uma resposta foi bem-sucedida e do tipo json | Symfony |
Você pode usar a trait
ou a versã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 );
}
}
Caso você não queira usar o trait
você pode usar a classe fornecida que se estende de PHPUnit_Framework_TestCase
. Você pode estender seu caso de teste ou usar os métodos estáticos como abaixo.
<?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 );
}
}
O armazenamento de esquema de justinrainbow/json-schema
permite registrar esquemas que substituirão efetivamente a localização real do esquema.
Exemplo:
{ "$ref" : " https://iglu.foobar.com/myschema.json#/definitions/positiveInteger " }
O resolvedor irá buscar o esquema deste endpoint e comparar o documento JSON com ele. Usando o armazenamento de esquema, você pode substituir esse comportamento.
$ schemastorage -> addSchema ( ' https://iglu.foobar.com/myschema.json ' , ( object )[ ' type ' => ' string ' ]);
Com isso implementado, o resolvedor pegará o esquema que já está em vigor sem baixá-lo novamente.
<?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
fornece extensões para um manuseio mais simples em diferentes casos de uso.
A extensão EnricoStahnJsonAssertExtensionSymfony
permite passar o objeto de resposta real gerado pelo framework symfony e cuida da parte de decodificação.
ANTES:
use EnricoStahn JsonAssert Assert as JsonAssert ;
// ...
$ content = $ response -> getContent ();
$ json = json_decode ( $ content );
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ json );
DEPOIS:
use EnricoStahn JsonAssert Extension Symfony as JsonAssert ;
// ...
JsonAssert:: assertJsonMatchesSchemaString ( ' ./my-schema.json ' , $ response );
Para executar o conjunto de testes, você precisa do compositor.
$ composer install
$ bin/phpunit
A biblioteca phpunit-json-assertions é licenciada pelo MIT.