測試Source
的語法和語意正確性。存在的問題(如果有)將返回給呼叫者,並附上描述、嚴重性和來源位置。
測試方法可以使用Source
執行。傳遞Source
對於新規則的單元測試很有用。
請注意,使用 REST API 執行的測試使用生產資料庫、儲存桶和相關資源。此類測試可能會產生使用費。我們強烈建議您使用 Firebase 本機模擬器套件執行規則測試,因為您可以在離線、非生產資源上執行測試,而無需支付使用費用。
以下是Source
的範例,可讓使用者將影像上傳到帶有其使用者 ID 並匹配正確元資料的儲存桶:
例子
// 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 轉碼語法。
路徑參數
參數 | |
---|---|
name | 必需的。對於針對 |
請求正文
請求正文包含具有以下結構的資料:
JSON 表示 | |
---|---|
{ "source": { object ( |
領域 | |
---|---|
source | 需要檢查 |
testSuite | 針對 當內聯提供 |
響應體
如果成功,回應正文包含具有以下結構的資料:
JSON 表示 | |
---|---|
{ "issues": [ { object ( |
領域 | |
---|---|
issues[] | 不同嚴重程度的句法和語義 |
testResults[] | |
授權範圍
需要以下 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
物件的一部分作為預發布檢查。
JSON 表示 | |
---|---|
{
"testCases": [
{
object ( |
領域 | |
---|---|
testCases[] | 與 |
測試用例
TestCase
訊息提供請求上下文以及對給定上下文是否被允許或拒絕的期望。測試案例可以指定request
、 resosurce
和functionMocks
來模擬對服務提供的函數的函數呼叫。
request
物件表示請求時存在的上下文。
resource
是執行請求之前出現在持久性儲存中的目標資源的值(例如,GCS 物件或 Firestore 文件的元資料)。
另請參閱 Cloud Firestore(請求、資源)和 Cloud Storage for Firebase(請求、資源)的相關參考文件。
JSON 表示 | |
---|---|
{ "expectation": enum ( |
領域 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
expectation | 測試期望。 | ||||||||||||||||
request | 請求上下文。 請求上下文的確切格式取決於服務。有關請求支援的欄位和類型的信息,請參閱相應的服務文件。至少,所有服務都支援以下欄位和類型:
如果請求值對於服務而言格式不正確,則該請求將作為無效參數而被拒絕。 | ||||||||||||||||
resource | 在滿足請求之前出現在持久性儲存中的可選資源值。 資源類型取決於 | ||||||||||||||||
functionMocks[] | 服務定義函數的可選規則函數模擬。如果未設置,則任何服務定義的規則函數都會傳回錯誤,這可能會也可能不會影響測試結果。 | ||||||||||||||||
pathEncoding | 指定是否對路徑(例如 request.path)進行編碼以及如何編碼。 | ||||||||||||||||
expressionReportLevel | 指定回應中應包含的內容。 |
期待
支援的測試用例期望集。
列舉 | |
---|---|
EXPECTATION_UNSPECIFIED | 未指定的期望。 |
ALLOW | 期待一個允許的結果。 |
DENY | 期待被拒絕的結果。 |
函數模擬
模擬規則函數定義。
模擬必須引用目標服務聲明的函數。函數 args 和結果的類型將在測試時推斷。如果 arg 或結果值與函數類型宣告不相容,則請求將被視為無效。
只要Arg
匹配器不同,就可以為給定的函數名稱提供多個FunctionMock
。對於給定的重載,可能只有一個函數,其中所有Arg
值都是Arg.any_value
。
另請參閱安全規則語言中的函數。
JSON 表示 | |
---|---|
{ "function": string, "args": [ { object ( |
領域 | |
---|---|
function | 函數的名稱。 函數名稱必須與服務聲明提供的名稱相符。 |
args[] | 要匹配的 |
result | 函數呼叫的模擬結果。 |
精胺酸
模擬函數的 Arg 匹配器。
JSON 表示 | |
---|---|
{ // Union field |
領域 | ||
---|---|---|
聯合字段type 。支援的參數值。 type 只能是以下之一: | ||
exactValue | 參數與提供的值完全匹配。 | |
anyValue | 參數與提供的任何值相符。 |
結果
函數模擬呼叫的可能結果值。
JSON 表示 | |
---|---|
{ // Union field |
領域 | ||
---|---|---|
聯合字段type 。支持的結果值。 type 只能是以下之一: | ||
value | 結果是實際值。值的類型必須與服務聲明的類型相符。 | |
undefined | 結果未定義,意味著無法計算結果。 |
路徑編碼
使用的路徑編碼類型。
列舉 | |
---|---|
ENCODING_UNSPECIFIED | 未指定編碼。預設為“URL_ENCODED”行為。 |
URL_ENCODED | 將路徑段視為 URL 編碼但帶有非編碼分隔符號(“/”)。這是預設行為。 |
PLAIN | 將總路徑視為非 URL 編碼,例如原始路徑。 |
表達報告級別
表達式報告回應中包含的資料量。
列舉 | |
---|---|
LEVEL_UNSPECIFIED | 沒有指定等級。預設為“無”行為。 |
NONE | 不要包含任何附加資訊。 |
FULL | 包括有關評估表達式的詳細報告。 |
VISITED | 僅包括評估期間訪問的表達式。 |
問題
問題包括警告、錯誤和棄用通知。
JSON 表示 | |
---|---|
{ "sourcePosition": { object ( |
領域 | |
---|---|
sourcePosition | 問題在 |
description | 簡短的錯誤描述。 |
severity | 問題的嚴重性。 |
來源位置
Source
內容中的位置,包括Source
訊息中File
的行號、列號和索引。用於調試目的。
JSON 表示 | |
---|---|
{ "fileName": string, "line": integer, "column": integer, "currentOffset": integer, "endOffset": integer } |
領域 | |
---|---|
fileName | |
line | 來源片段的行號。 1 為基礎。 |
column | 與來源片段關聯的來源行上的第一列。 |
currentOffset | 相對於檔案開頭的起始位置。 |
endOffset | 相對於檔案開頭的結束位置。 |
嚴重性
問題嚴重性的集合。
列舉 | |
---|---|
SEVERITY_UNSPECIFIED | 未指定的嚴重程度。 |
DEPRECATION | 可能不再支援或維護的語句和方法的棄用問題。 |
WARNING | 警告例如:未使用的變數。 |
ERROR | 錯誤例如:不匹配的花括號或變數重新定義。 |
測試結果
測試結果訊息包含測試狀態以及測試失敗的描述和來源位置。
JSON 表示 | |
---|---|
{ "state": enum ( |
領域 | |
---|---|
state | 測試狀態。 |
debugMessages[] | 與評估期間遇到的測試執行問題相關的偵錯訊息。 偵錯訊息可能與過多或過少的函數模擬呼叫或評估期間發生的運行時錯誤有關。 例如: |
errorPosition | 表達式的求值可能會導致錯誤。預設規則是拒絕的,因此產生錯誤時的 例如 |
functionCalls[] | 對服務定義的方法進行的函數呼叫集。 函數呼叫按照在評估期間遇到的順序包含在內,為模擬和未模擬的函數提供,並且無論測試 |
visitedExpressions[] | 給定測試的存取權限表達式集。這將傳回與測試案例相關的所有存取權限表達式的位置和評估結果,例如
有關中間評估狀態的詳細報告,請參閱 |
expressionReports[] | 從規則集 AST 中的表達式到它們求值的值的對應。部分嵌套以鏡像 AST 結構。請注意,與上面的「visitedExpressions」欄位相比,該欄位實際上是追蹤表達式而不是權限語句。省略了文字表達。 |
狀態
測試結果的有效狀態。
列舉 | |
---|---|
STATE_UNSPECIFIED | 未設定測試狀態。 |
SUCCESS | 測試成功。 |
FAILURE | 測試失敗。 |
函數呼叫
表示在測試執行期間呼叫的服務定義的函數呼叫。
JSON 表示 | |
---|---|
{ "function": string, "args": [ value ] } |
領域 | |
---|---|
function | 呼叫的函數的名稱。 |
args[] | 提供給函數的參數。 |
訪問表達式
儲存規則中存取的表達式的位置和存取結果。
JSON 表示 | |
---|---|
{
"sourcePosition": {
object ( |
領域 | |
---|---|
sourcePosition | |
value | 存取表達式的評估值,例如 true/false |
表達報告
描述在文件中的何處找到表達式以及在使用過程中對其求值的結果。
JSON 表示 | |
---|---|
{ "sourcePosition": { object ( |
領域 | |
---|---|
sourcePosition | 表達式在原始規則來源中的位置。 |
values[] | 此表達式在遇到時求值的值。 |
children[] | 子表達式 |
值計數
表達式被計算為特定 ExpressionValue 的次數的元組。
JSON 表示 | |
---|---|
{ "value": value, "count": integer } |
領域 | |
---|---|
value | 表達式的回傳值 |
count | 該表達式傳回的次數。 |