Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

以交互方式測試功能

Cloud Functions shell 提供了一個交互式 shell,用於使用測試數據調用函數。 Shell 支持所有觸發器類型。

設置管理員憑據(可選)

如果你希望你的功能測試,通過與谷歌的API或其他火力地堡的API互動火力地堡管理員SDK ,您可能需要設置管理員憑據。

  • 雲和的FireStore實時數據庫觸發器已經有足夠的憑據,並且不需要額外的設置。
  • 所有其他 API,包括 Firebase API(例如 Authentication 和 FCM)或 Google API(例如 Cloud Translation 或 Cloud Speech)都需要本部分中描述的設置步驟。這適用無論你正在使用的功能殼或firebase emulators:start

要為模擬功能設置管理員憑據:

  1. 打開服務帳戶窗格中的谷歌雲控制台。
  2. 確保App Engine的默認服務帳戶被選中,並使用選項菜單右側選擇創建關鍵
  3. 提示時,選擇JSON的密鑰類型,然後單擊創建
  4. 將您的 Google 默認憑據設置為指向下載的密鑰:

    Unix

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    
    $ firebase functions:shell
    

    視窗

    $ set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    
    $ firebase functions:shell
    

完成這些步驟後,你的功能測試可以訪問使用火力地堡和谷歌的API管理SDK 。例如,在測試的認證觸發時,仿真功能可以調用admin.auth().getUserByEmail(email)

使用 Cloud Functions shell 提供函數

Cloud Functions shell 使用交互式 shell 模擬所有類型的函數觸發器,以使用測試數據調用函數。選項因函數類型而異,但基本使用格式為:

myFunctionName(data, options)

data參數需要實時數據庫,雲計算公司的FireStore和PubSub的觸發器,以及可選的其他所有功能類型。此外,可選的options參數僅適用於實時數據庫和雲功能的FireStore是有效的。

或者,您可以通過將文件保存為變量並使用它調用函數來從本地文件加載測試數據:

var data = require('./path/to/testData.json');
myFunction(data);

安裝和配置 Cloud Functions shell

要使用此功能, firebase-tools必須有最低版本3.11.0和firebase-functions SDK必須有最低版本0.6.2。同時更新,請在以下命令functions/目錄為您的項目:

npm install --save firebase-functions@latest
npm install -g firebase-tools

如果您使用自定義的功能配置變量,首先運行命令,讓您的自定義配置(在中運行此functions目錄)在本地環境:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

最後,使用以下命令運行 shell:

firebase functions:shell

調用 HTTPS 功能

對於殼調用HTTPS功能主治,用法是一樣的request NPM模塊,而且更換request與您要模擬函數的名稱。例如:

# invoke
myHttpsFunction()
myHttpsFunction.get()
myHttpsFunction.post()

# invoke at sub-path
myHttpsFunction('/path')
myHttpsFunction.get('/path')
myHttpsFunction.post('/path')

# send POST request with form data
myHttpsFunction.post('/path').form( {foo: 'bar' })

調用 HTTPS Callable 函數

在本地調用 HTTPS Callable 函數時,您需要提供適當的測試數據。

# invoke
myCallableFunction('test data')
myCallableFunction({'foo': 'bar'})

可選地,可以通過在Firebase-Instance-ID-token作為第二個參數。這必須是一個字符串。

# invoke with FCM registration token
myCallableFunction('test data', {instanceIdToken: 'sample token'})

仿真context.auth是當前不可用。

調用實時數據庫函數

在本地運行實時數據庫功能時,您需要提供適當的測試數據。這通常意味著提供用於新的測試數據onCreate操作,舊/移除數據onDelete操作,並且既為onUpdateonWrite功能:

# invoke onCreate function
myDatabaseFunction('new_data')

# invoke onDelete function
myDatabaseFunction('old_data')

# invoke onUpdate or onWrite function
myDatabaseFunction({before: 'old_data', after: 'new_data' })

除了before/after選擇,外殼提供了params在路徑嘲諷通配符使用選項:

# mock wildcards in path, for example: if the path was input/{group}/{id}
myDatabaseFunction('data', {params: {group: 'a', id: 123}})

默認情況下,shell 以管理員(服務帳戶)權限運行實時數據庫功能。使用auth選項來代替運行功能為特定的終端用戶,或者作為未認證用戶:

# to mock unauthenticated user
myDatabaseFunction('data', {authMode: 'USER'})
# to mock end user
myDatabaseFunction('data', {auth: {uid: 'abcd'}})

調用 Firestore 函數

在本地運行 Firestore 函數時,您需要提供適當的測試數據。這通常意味著,用於提供新的測試數據onCreate操作,舊/移除數據onDelete操作,並且既為onUpdateonWrite功能。請注意,Firestore 數據必須是鍵值對;看到支持的數據類型

# invoke onCreate function
myFirestoreFunction({foo: ‘new’})

# invoke onDelete function
myFirestoreFunction({foo: ‘old’})

# invoke onUpdate or onWrite function
myFirestoreFunction({before: {foo: ‘old’}, after: {foo: ‘new’} })

除了before/after該領域data對象,你可以使用params上的字段options對象要以文件名模擬通配符:

# mock wildcards in document name, for example: if the name was input/{group}/{id}
myFirestoreFunction({foo: ‘new’}, {params: {group: 'a', id: 123}})

shell 始終以管理權限運行 Firestore 函數,這意味著它模擬創建/更新/刪除事件,就好像它是由管理用戶完成的一樣。

調用 PubSub 函數

對於PubSub的功能,插入在您的消息有效載荷Buffer實例,並添加任選的數據屬性,如下所示:

// invokes a function with the JSON message { hello: 'world' } and attributes { foo: 'bar' }
myPubsubFunction({data: new Buffer('{"hello":"world"}'), attributes: {foo: 'bar'}})

調用分析函數

你可以調用解析函數沒有運行任何數據myAnalyticsFunction()的殼。要使用測試數據運行函數,建議為函數需要的特定事件數據字段定義一個變量:

var data = {
  eventDim: [{
    // populates event.data.params
    params:{foo:'bar'},
    // populates event.data.name
    name: 'event_name',
    // populates event.data.logTime, specify in microseconds
    timestampMicros: Date.now() * 1000,
    // populates event.data.previousLogTime, specify in microseconds
    previousTimestampMicros: Date.now() * 1000,
    // populates event.data.reportingDate, specify in 'YYYYMMDD' format
    date: '20170930',
    // populates event.data.valueInUSD
    valueInUsd: 230
  }],
  userDim: userDim
};

myAnalyticsFunction(data);

調用 Storage、Auth 和 Crashlytics 函數

對於 Storage、Auth 和 Crashlytics 函數,使用您希望在函數內部查看的測試數據調用本地函數。您的測試數據必須遵循相應的數據格式:

僅指定您的代碼所依賴的字段,如果您只想運行該函數,則根本不指定。