簡體   English   中英

Firebase 雲功能單元測試 HTTP onCall

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM