phpunit json assertions
v4.0.0
PHPUnit 的 JSON 断言包括帮助通过各种方法验证 JSON 数据的特征/方法。
foo.bar[3]
) $ composer require estahn/phpunit-json-assertions --dev
或者在你的composer.json
中:
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
断言 | 描述 | 可用于 |
---|---|---|
断言JsonMatchesSchema | 根据提供的架构文件断言 json 内容有效 | 全部 |
断言JsonMatchesSchemaString | 根据提供的模式字符串断言 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。
$ composer install
$ bin/phpunit
phpunit-json-assertions 库已获得 MIT 许可。