Method: projects.test

Source اختبار للصحة النحوية والدلالية. سيتم إرجاع المشكلات الموجودة، إن وجدت، إلى المتصل مع الوصف وخطورتها وموقع المصدر.

يمكن تنفيذ طريقة الاختبار باستخدام Source . يعتبر تمرير Source مفيدًا لاختبار الوحدة لقواعد جديدة.

لاحظ أن الاختبارات التي يتم إجراؤها باستخدام REST API تستخدم قواعد بيانات الإنتاج ومستودعات التخزين ومصادر البحث ذات الصلة. يمكن أن يؤدي مثل هذا الاختبار إلى فرض رسوم استخدام. نوصي بشدة باستخدام Firebase Local Emulator Suite لإجراء اختبار القواعد، حيث يمكنك إجراء الاختبارات على موارد غير متصلة بالإنترنت دون رسوم استخدام.

فيما يلي مثال على Source الذي يسمح للمستخدمين بتحميل الصور إلى مجموعة تحمل معرف المستخدم الخاص بهم ومطابقة البيانات التعريفية الصحيحة:

مثال

// Users are allowed to subscribe and unsubscribe to the blog.
service firebase.storage {
  match /users/{userId}/images/{imageName} {
      allow write: if userId == request.auth.uid
          && (imageName.matches('*.png$')
          || imageName.matches('*.jpg$'))
          && resource.mimeType.matches('^image/')
  }
}

طلب HTTP

POST https://firebaserules.googleapis.com/v1/{name=projects/**}:test

يستخدم عنوان URL بناء جملة gRPC Transcoding .

معلمات المسار

حدود
name

string

مطلوب. بالنسبة للاختبارات مقابل source ، يجب أن يشير اسم المورد إلى المشروع: التنسيق: projects/{project_id}

هيئة الطلب

يحتوي نص الطلب على بيانات بالبنية التالية:

تمثيل جيسون
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
مجالات
source

object ( Source )

Source المراد التحقق من صحته.

testSuite

object ( TestSuite )

TestSuite المضمّن الذي سيتم تنفيذه مقابل Source .

عند توفير Source في السطر، سيتم تشغيل حالات الاختبار فقط إذا كان Source صالحًا من الناحية النحوية والدلالية.

هيئة الاستجابة

في حالة النجاح، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

الرد على FirebaseRulesService.TestRuleset .

تمثيل جيسون
{
  "issues": [
    {
      object (Issue)
    }
  ],
  "testResults": [
    {
      object (TestResult)
    }
  ]
}
مجالات
issues[]

object ( Issue )

قضايا Source النحوية والدلالية متفاوتة الخطورة. ستمنع مشكلات خطورة ERROR تنفيذ الاختبارات.

testResults[]

object ( TestResult )

مجموعة نتائج الاختبار المعطاة لحالات الاختبار في TestSuite . ستظهر النتائج بنفس الترتيب الذي تظهر به حالات الاختبار في TestSuite .

نطاقات التفويض

يتطلب أحد نطاقات OAuth التالية:

  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/firebase
  • https://www.googleapis.com/auth/firebase.readonly

لمزيد من المعلومات، راجع نظرة عامة على المصادقة .

حزمة اختبار

TestSuite عبارة عن مجموعة من مثيلات TestCase التي تتحقق من صحة القواعد المنطقية. قد تتم الإشارة إلى TestSuite بشكل مباشر ضمن استدعاء projects.test أو كجزء من كائن Release كفحص ما قبل النشر.

تمثيل جيسون
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
مجالات
testCases[]

object ( TestCase )

مجموعة من حالات الاختبار المرتبطة بـ TestSuite .

حالة اختبار

توفر رسائل TestCase سياق الطلب وتوقعًا بشأن ما إذا كان سيتم السماح بالسياق المحدد أو رفضه. قد تحدد حالات الاختبار request resosurce و functionMocks للسخرية من استدعاء دالة لوظيفة مقدمة من الخدمة.

يمثل كائن request السياق الموجود في وقت الطلب.

resource هو قيمة المورد المستهدف (على سبيل المثال، البيانات الوصفية لكائن GCS أو مستند Firestore) كما يظهر في التخزين المستمر قبل تنفيذ الطلب.

راجع أيضًا الوثائق المرجعية ذات الصلة بـ Cloud Firestore ( الطلب ، المورد ) وCloud Storage for Firebase ( الطلب ، المورد ).

تمثيل جيسون
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
مجالات
expectation

enum ( Expectation )

توقع الاختبار.

request

value ( Value format)

سياق الطلب.

يعتمد التنسيق الدقيق لسياق الطلب على الخدمة. راجع وثائق الخدمة المناسبة للحصول على معلومات حول الحقول والأنواع المدعومة عند الطلب. كحد أدنى، تدعم كافة الخدمات المجالات والأنواع التالية:

حقل الطلب يكتب
auth.uid string
auth.token map<string, string>
رؤوس map<string, string>
طريقة string
المعلمات map<string, string>
طريق string
وقت google.protobuf.Timestamp

إذا لم يتم صياغة قيمة الطلب بشكل جيد للخدمة، فسيتم رفض الطلب كوسيطة غير صالحة.

resource

value ( Value format)

قيمة المورد الاختيارية كما تظهر في التخزين الدائم قبل تلبية الطلب.

يعتمد نوع المورد على قيمة request.path .

functionMocks[]

object ( FunctionMock )

محاكاة وظيفة القواعد الاختيارية للوظائف المحددة بالخدمة. إذا لم يتم تعيينها، فمن المتوقع أن تقوم أي وظيفة قواعد محددة بالخدمة بإرجاع خطأ، والذي قد يؤثر أو لا يؤثر على نتيجة الاختبار.

pathEncoding

enum ( PathEncoding )

يحدد ما إذا كان سيتم ترميز المسارات (مثل request.path) وكيفية ذلك.

expressionReportLevel

enum ( ExpressionReportLevel )

يحدد ما يجب تضمينه في الرد.

توقع

مجموعة توقعات حالة الاختبار المدعومة.

التعدادات
EXPECTATION_UNSPECIFIED توقع غير محدد.
ALLOW توقع نتيجة مسموحة.
DENY توقع نتيجة مرفوضة.

FunctionMock

تعريف وظيفة القواعد الوهمية.

يجب أن تشير المحاكاة إلى وظيفة معلنة بواسطة الخدمة المستهدفة. سيتم استنتاج نوع وسيطات الوظيفة والنتيجة في وقت الاختبار. إذا كانت قيم الوسيطة أو النتيجة غير متوافقة مع إعلان نوع الوظيفة، فسيتم اعتبار الطلب غير صالح.

يمكن توفير أكثر من FunctionMock لاسم دالة معينة طالما أن مُطابقات Arg مختلفة. قد تكون هناك دالة واحدة فقط للتحميل الزائد المحدد حيث تكون جميع قيم Arg هي Arg.any_value .

راجع أيضًا الوظائف في لغة قواعد الأمان .

تمثيل جيسون
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
مجالات
function

string

اسم الوظيفة.

يجب أن يتطابق اسم الوظيفة مع الاسم الذي يوفره إعلان الخدمة.

args[]

object ( Arg )

قائمة قيم Arg المطلوب مطابقتها. الترتيب الذي يتم به توفير الوسائط هو الترتيب الذي يجب أن تظهر به في استدعاء الوظيفة.

result

object ( Result )

النتيجة الوهمية لاستدعاء الوظيفة.

أرج

المطابقات الوسيطية للوظيفة الوهمية.

تمثيل جيسون
{

  // Union field type can be only one of the following:
  "exactValue": value,
  "anyValue": {
    object
  }
  // End of list of possible types for union field type.
}
مجالات
type حقل الاتحاد قيم الوسيطة المدعومة. يمكن أن يكون type واحدًا فقط مما يلي:
exactValue

value ( Value format)

الوسيطة تتطابق تمامًا مع القيمة المقدمة.

anyValue

object

الوسيطة تتطابق مع أي قيمة مقدمة.

نتيجة

قيم النتائج المحتملة من الاستدعاء الوهمي للوظيفة.

تمثيل جيسون
{

  // Union field type can be only one of the following:
  "value": value,
  "undefined": {
    object
  }
  // End of list of possible types for union field type.
}
مجالات
type حقل الاتحاد قيم النتائج المدعومة يمكن أن يكون type واحدًا فقط مما يلي:
value

value ( Value format)

والنتيجة هي القيمة الفعلية. يجب أن يتطابق نوع القيمة مع النوع المعلن بواسطة الخدمة.

undefined

object

النتيجة غير محددة، مما يعني أنه لا يمكن حساب النتيجة.

PathEncoding

نوع ترميز المسار المستخدم.

التعدادات
ENCODING_UNSPECIFIED لم يتم تحديد أي ترميز. الإعدادات الافتراضية هي السلوك "URL_ENCODED".
URL_ENCODED يتعامل مع أجزاء المسار على أنها عنوان URL مشفر ولكن مع فواصل غير مشفرة ("/"). هذا هو السلوك الافتراضي.
PLAIN يتعامل مع المسار الإجمالي على أنه مشفر بدون عنوان URL، على سبيل المثال، خام.

مستوى تقرير التعبير

مقدار البيانات المطلوب تضمينها في استجابة تقرير التعبير.

التعدادات
LEVEL_UNSPECIFIED لم يتم تحديد أي مستوى. الافتراضي هو السلوك "لا شيء".
NONE لا تقم بتضمين أي معلومات إضافية.
FULL تضمين تقارير مفصلة عن التعبيرات التي تم تقييمها.
VISITED قم بتضمين التعبيرات التي تمت زيارتها أثناء التقييم فقط.

مشكلة

تتضمن المشكلات التحذيرات والأخطاء وإشعارات الإيقاف.

تمثيل جيسون
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
مجالات
sourcePosition

object ( SourcePosition )

موضع المسألة في Source .

description

string

وصف قصير للخطأ.

severity

enum ( Severity )

مدى خطورة المشكلة.

موقف المصدر

الموضع في محتوى Source بما في ذلك السطر ورقم العمود وفهرس File في رسالة Source . تستخدم لأغراض التصحيح.

تمثيل جيسون
{
  "fileName": string,
  "line": integer,
  "column": integer,
  "currentOffset": integer,
  "endOffset": integer
}
مجالات
fileName

string

اسم File .

line

integer

رقم السطر للجزء المصدر. 1- القائم.

column

integer

العمود الأول على السطر المصدر المرتبط بالجزء المصدر.

currentOffset

integer

موضع البداية بالنسبة إلى بداية الملف.

endOffset

integer

موضع النهاية بالنسبة إلى بداية الملف.

خطورة

مجموعة خطورة المشكلة.

التعدادات
SEVERITY_UNSPECIFIED شدة غير محددة.
DEPRECATION مشكلة إهمال للبيانات والطريقة التي ربما لم تعد مدعومة أو صيانتها.
WARNING تحذيرات مثل: المتغيرات غير المستخدمة.
ERROR أخطاء مثل: الأقواس المتعرجة غير المتطابقة أو إعادة تعريف المتغير.

نتيجة الاختبار

رسالة نتيجة الاختبار التي تحتوي على حالة الاختبار بالإضافة إلى الوصف وموضع المصدر لحالات فشل الاختبار.

تمثيل جيسون
{
  "state": enum (State),
  "debugMessages": [
    string
  ],
  "errorPosition": {
    object (SourcePosition)
  },
  "functionCalls": [
    {
      object (FunctionCall)
    }
  ],
  "visitedExpressions": [
    {
      object (VisitedExpression)
    }
  ],
  "expressionReports": [
    {
      object (ExpressionReport)
    }
  ]
}
مجالات
state

enum ( State )

حالة الاختبار.

debugMessages[]

string

تصحيح الرسائل المتعلقة بمشكلات تنفيذ الاختبار التي تمت مواجهتها أثناء التقييم.

قد تكون رسائل التصحيح مرتبطة بعدد كبير جدًا أو قليل جدًا من استدعاءات نماذج الوظائف أو بأخطاء وقت التشغيل التي تحدث أثناء التقييم.

على سبيل المثال: Unable to read variable [name: "resource"]

errorPosition

object ( SourcePosition )

الموضع في Source حيث يحدث خطأ وقت التشغيل الأساسي.

قد يؤدي تقييم التعبير إلى حدوث خطأ. يتم رفض القواعد بشكل افتراضي، لذا يكون توقع DENY عند إنشاء خطأ صالحًا. عند وجود خطأ DENY ، يتم إرجاع SourcePosition .

على سبيل المثال، errorPosition { line: 19 column: 37 }

functionCalls[]

object ( FunctionCall )

مجموعة استدعاءات الوظائف التي تم إجراؤها للطرق المحددة بالخدمة.

يتم تضمين استدعاءات الوظائف بالترتيب الذي تمت مواجهتها به أثناء التقييم، ويتم توفيرها لكل من الوظائف التي تم الاستهزاء بها وغير التي تم الاستهزاء بها، ويتم تضمينها في الاستجابة بغض النظر عن state الاختبار.

visitedExpressions[]

object ( VisitedExpression )

مجموعة تعبيرات الأذونات التي تمت زيارتها لاختبار معين. يؤدي ذلك إلى إرجاع المواضع ونتائج التقييم لجميع تعبيرات الأذونات التي تمت زيارتها والتي كانت ذات صلة بحالة الاختبار، على سبيل المثال

match /path {
  allow read if: <expr>
}

للحصول على تقرير مفصل عن حالات التقييم المتوسطة، راجع حقل expressionReports

expressionReports[]

object ( ExpressionReport )

التعيين من التعبير في مجموعة القواعد AST إلى القيم التي تم تقييمها عليها. متداخلة جزئيًا لتعكس بنية AST. لاحظ أن هذا الحقل يقوم في الواقع بتتبع التعبيرات وليس بيانات الأذونات على النقيض من حقل "visitedExpressions" أعلاه. تم حذف التعبيرات الحرفية.

ولاية

حالات صالحة لنتيجة الاختبار.

التعدادات
STATE_UNSPECIFIED لم يتم تعيين حالة الاختبار.
SUCCESS الاختبار هو النجاح.
FAILURE الاختبار فاشل.

FunctionCall

يمثل استدعاء دالة معرفة بالخدمة تم استدعاؤه أثناء تنفيذ الاختبار.

تمثيل جيسون
{
  "function": string,
  "args": [
    value
  ]
}
مجالات
function

string

اسم الوظيفة التي تم استدعاؤها.

args[]

value ( Value format)

الوسائط التي تم توفيرها للوظيفة.

تمت الزيارة

قم بتخزين الموضع ونتائج الوصول للتعبير الذي تمت زيارته في القواعد.

تمثيل جيسون
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
مجالات
sourcePosition

object ( SourcePosition )

الموضع في Source حيث تمت زيارة التعبير.

value

value ( Value format)

القيمة المقدرة للتعبير الذي تمت زيارته، على سبيل المثال، صحيح/خطأ

تقرير التعبير

يصف مكان العثور على تعبير في ملف وما تم تقييمه عليه خلال فترة استخدامه.

تمثيل جيسون
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
مجالات
sourcePosition

object ( SourcePosition )

موضع التعبير في مصدر القواعد الأصلية.

values[]

object ( ValueCount )

القيم التي يتم تقييم هذا التعبير إليها عند مواجهتها.

children[]

object ( ExpressionReport )

التعبيرات الفرعية

عدد القيمة

Tuple لمعرفة عدد المرات التي تم فيها تقييم التعبير إلى قيمة ExpressionValue معينة.

تمثيل جيسون
{
  "value": value,
  "count": integer
}
مجالات
value

value ( Value format)

قيمة الإرجاع للتعبير

count

integer

عدد مرات إرجاع هذا التعبير.