Method: projects.test

測試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

string

必需的。對於針對source測試,資源名稱必須引用項目:格式: projects/{project_id}

請求正文

請求正文包含具有以下結構的資料:

JSON 表示
{
  "source": {
    object (Source)
  },
  "testSuite": {
    object (TestSuite)
  }
}
領域
source

object ( Source )

需要檢查Source的正確性。

testSuite

object ( TestSuite )

針對Source執行的內聯TestSuite

當內聯提供Source時,僅當Source在語法和語意上有效時才會執行測試案例。

響應體

如果成功,回應正文包含具有以下結構的資料:

FirebaseRulesService.TestRuleset的回應。

JSON 表示
{
  "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物件的一部分作為預發布檢查。

JSON 表示
{
  "testCases": [
    {
      object (TestCase)
    }
  ]
}
領域
testCases[]

object ( TestCase )

TestSuite關聯的測試案例的集合。

測試用例

TestCase訊息提供請求上下文以及對給定上下文是否被允許或拒絕的期望。測試案例可以指定requestresosurcefunctionMocks來模擬對服務提供的函數的函數呼叫。

request物件表示請求時存在的上下文。

resource是執行請求之前出現在持久性儲存中的目標資源的值(例如,GCS 物件或 Firestore 文件的元資料)。

另請參閱 Cloud Firestore(請求資源)和 Cloud Storage for Firebase(請求資源)的相關參考文件。

JSON 表示
{
  "expectation": enum (Expectation),
  "request": value,
  "resource": value,
  "functionMocks": [
    {
      object (FunctionMock)
    }
  ],
  "pathEncoding": enum (PathEncoding),
  "expressionReportLevel": enum (ExpressionReportLevel)
}
領域
expectation

enum ( Expectation )

測試期望。

request

value ( Value format)

請求上下文。

請求上下文的確切格式取決於服務。有關請求支援的欄位和類型的信息,請參閱相應的服務文件。至少,所有服務都支援以下欄位和類型:

請求字段類型
授權uid string
授權令牌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期待被拒絕的結果。

函數模擬

模擬規則函數定義。

模擬必須引用目標服務聲明的函數。函數 args 和結果的類型將在測試時推斷。如果 arg 或結果值與函數類型宣告不相容,則請求將被視為無效。

只要Arg匹配器不同,就可以為給定的函數名稱提供多個FunctionMock 。對於給定的重載,可能只有一個函數,其中所有Arg值都是Arg.any_value

另請參閱安全規則語言中的函數

JSON 表示
{
  "function": string,
  "args": [
    {
      object (Arg)
    }
  ],
  "result": {
    object (Result)
  }
}
領域
function

string

函數的名稱。

函數名稱必須與服務聲明提供的名稱相符。

args[]

object ( Arg )

要匹配的Arg值列表。提供參數的順序就是它們在函數呼叫中必須出現的順序。

result

object ( Result )

函數呼叫的模擬結果。

精胺酸

模擬函數的 Arg 匹配器。

JSON 表示
{

  // 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

參數與提供的任何值相符。

結果

函數模擬呼叫的可能結果值。

JSON 表示
{

  // 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

結果未定義,意味著無法計算結果。

路徑編碼

使用的路徑編碼類型。

列舉
ENCODING_UNSPECIFIED未指定編碼。預設為“URL_ENCODED”行為。
URL_ENCODED將路徑段視為 URL 編碼但帶有非編碼分隔符號(“/”)。這是預設行為。
PLAIN將總路徑視為非 URL 編碼,例如原始路徑。

表達報告級別

表達式報告回應中包含的資料量。

列舉
LEVEL_UNSPECIFIED沒有指定等級。預設為“無”行為。
NONE不要包含任何附加資訊。
FULL包括有關評估表達式的詳細報告。
VISITED僅包括評估期間訪問的表達式。

問題

問題包括警告、錯誤和棄用通知。

JSON 表示
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "description": string,
  "severity": enum (Severity)
}
領域
sourcePosition

object ( SourcePosition )

問題在Source的位置。

description

string

簡短的錯誤描述。

severity

enum ( Severity )

問題的嚴重性。

來源位置

Source內容中的位置,包括Source訊息中File的行號、列號和索引。用於調試目的。

JSON 表示
{
  "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錯誤例如:不匹配的花括號或變數重新定義。

測試結果

測試結果訊息包含測試狀態以及測試失敗的描述和來源位置。

JSON 表示
{
  "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測試失敗。

函數呼叫

表示在測試執行期間呼叫的服務定義的函數呼叫。

JSON 表示
{
  "function": string,
  "args": [
    value
  ]
}
領域
function

string

呼叫的函數的名稱。

args[]

value ( Value format)

提供給函數的參數。

訪問表達式

儲存規則中存取的表達式的位置和存取結果。

JSON 表示
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "value": value
}
領域
sourcePosition

object ( SourcePosition )

Source中存取表達式的位置。

value

value ( Value format)

存取表達式的評估值,例如 true/false

表達報告

描述在文件中的何處找到表達式以及在使用過程中對其求值的結果。

JSON 表示
{
  "sourcePosition": {
    object (SourcePosition)
  },
  "values": [
    {
      object (ValueCount)
    }
  ],
  "children": [
    {
      object (ExpressionReport)
    }
  ]
}
領域
sourcePosition

object ( SourcePosition )

表達式在原始規則來源中的位置。

values[]

object ( ValueCount )

此表達式在遇到時求值的值。

children[]

object ( ExpressionReport )

子表達式

值計數

表達式被計算為特定 ExpressionValue 的次數的元組。

JSON 表示
{
  "value": value,
  "count": integer
}
領域
value

value ( Value format)

表達式的回傳值

count

integer

該表達式傳回的次數。