การยืนยัน JSON สำหรับ PHPUnit มีลักษณะ/วิธีการเพื่อช่วยตรวจสอบข้อมูล JSON ของคุณผ่านวิธีการต่างๆ
foo.bar[3]
) $ composer require estahn/phpunit-json-assertions --dev
หรือใน composer.json
ของคุณ:
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
ยืนยัน | คำอธิบาย | มีจำหน่ายใน |
---|---|---|
ยืนยัน JsonMatchesSchema | ยืนยันว่าเนื้อหา json ถูกต้องตามไฟล์สคีมาที่ให้มา | ทั้งหมด |
assertJsonMatchesSchemaString | ยืนยันว่าเนื้อหา 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 install
$ bin/phpunit
ไลบรารี phpunit-json-assertions ได้รับอนุญาตภายใต้ MIT