تتضمن تأكيدات JSON لـ PHPUnit سمات/طرق للمساعدة في التحقق من صحة بيانات JSON الخاصة بك من خلال طرق مختلفة.
foo.bar[3]
) $ composer require estahn/phpunit-json-assertions --dev
أو في composer.json
الخاص بك :
{
"require-dev" : {
"estahn/phpunit-json-assertions" : " @stable "
}
}
تأكيد | وصف | متوفر في |
---|---|---|
AsseJsonMatchesSchema | التأكد من أن محتوى json صالح وفقًا لملف المخطط المقدم | الجميع |
AssurerJsonMatchesSchemaString | التأكد من أن محتوى json صالح وفقًا لسلسلة المخطط المتوفرة | الجميع |
أجزمJsonValueEquals | التأكد مما إذا كانت القيمة التي تم استردادها باستخدام التعبير تساوي القيمة المتوقعة | الجميع |
أجزمJsonValueEquals | التأكد مما إذا كانت القيمة التي تم استردادها باستخدام التعبير تساوي القيمة المتوقعة | الجميع |
assurerJsonResponse | التأكد من أن الاستجابة ناجحة ومن النوع 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).