[英]Firebase Cloud Function unit test HTTP onCall
我想為一堆雲函數編寫一些單元測試。 現在我面臨以下問題。 使用firebase-functions-test
我不知何故無法測試 HTTP 觸發的雲功能。 以下是我想使用jest
測試的一些雲功能:
export cloudFunctions = {
createUserByAdmin: functions.runWith({ timeoutSeconds: 30, memory: '256MB' }).https.onCall(UserService.createUserByAdmin),
updateUserByAdmin: functions.runWith({ timeoutSeconds: 30, memory: '256MB' }).https.onCall(UserService.updateUserByAdmin),
deleteUserByAdmin: functions.runWith({ timeoutSeconds: 30, memory: '256MB' }).https.onCall(UserService.deleteUserByAdmin)
}
它們都部署在 Firebase 上,並且可以正常工作。 但是我找不到使用firebase-functions-test
包調用的方法。 此外,還有一些關於如何使用該包編寫單元測試的示例,但沒有一個示例測試 http 觸發的函數。
這是我的測試文件:
import * as functions from 'firebase-functions-test'
import * as admin from 'firebase-admin'
import * as path from 'path'
const projectConfig = {
projectId: 'test-fb',
}
const testEnv = functions(
projectConfig,
path.resolve('DO-NOT-EDIT.dev.fb-admin-sdk-key.json'),
)
describe('[Cloud Functions] User Service', () => {
let cloudFunctions
beforeAll(() => {
cloudFunctions = require('../index')
})
afterAll(() => {
// delete made accounts/entrys
})
describe('Testing "createUserByAdmin"', () => {
it('Creating User does work', () => {
expect(1).toBe(0)
})
})
})
有人知道如何測試http雲功能嗎? 我真的很感激一個例子。 謝謝!
我實際上找到了一種關於如何使用firebase-functions-test
測試 HTTP Cloud Functions 的方法,它可以與包裝函數一起使用。 看看這個參考頁面。 這里有一些代碼可以讓事情更清楚一些。
這是我的一個測試的片段
import * as functions from 'firebase-functions-test'
import * as admin from 'firebase-admin'
import * as path from 'path'
const projectConfig = {
projectId: 'myproject-id',
}
const testEnv = functions(
projectConfig,
path.resolve('fb-admin-sdk-key.json'),
)
// has to be after initializing functions
import * as cloudFunctions from '../index'
describe('Testing "createUserByAdmin"', () => {
const createUserByAdmin = testEnv.wrap(cloudFunctions.createUserByAdmin)
it('Creating User does work', async (done) => {
const data = {
displayName: 'Jest Unit Test',
email: 'unit@domain.com',
password: 'password',
uid: null,
}
const context = {
auth: {
token: {
access: 'somestring,
},
uid: 'mockuiddddd',
},
}
await createUserByAdmin(data, context)
.then(async (createdUser: any) => {
expect(createdUser.status).toBe('OK')
done()
})
.catch((error: any) => {
fail('createUserByAdmin failed with the following ' + error)
})
})
})
在使用我們的projectConfig
和我們的服務帳戶密鑰文件初始化我們的測試環境后,您會看到。
const testEnv = functions(
projectConfig,
path.resolve('fb-admin-sdk-key.json'),
)
您只需要使用.wrap()
函數包裝適當的雲函數。
const createUserByAdmin = testEnv.wrap(cloudFunctions.createUserByAdmin)
您可以像其他所有函數一樣調用它(請記住,雲函數通常需要一個數據參數(使用您在雲函數中使用的變量)以及上下文參數,具體取決於您處理身份驗證/授權的方式必須嘗試錯誤才能找到您的函數請求的正確上下文屬性。
如果您為生產雲功能編寫測試確保在運行測試后進行清理 - 例如刪除創建的帳戶或刪除 firestore 或實時數據庫中的數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.