![](/img/trans.png)
[英]How to setup a test suit for unit testing Firebase Functions that connect with emulators, specifically the Firestore emulator?
[英]How to send context parameter in unit test to a firebase functions running on the functions emulator
我設法啟動了 firebase 模擬器並加載了一個雲功能。 現在我想寫一個測試。
問題我使用chai-http
在模擬器中調用函數,但我沒有成功地向函數發送context
。
使用chai-http
調用函數時,我看到以下警告和錯誤:
{"severity":"WARNING","message":"Request body has extra fields: context"}
{"severity":"ERROR","message":"Invalid request, unable to process."}
這是測試代碼片段:
it("function_call", async() => {
await new Promise((resolve, reject) => {
chai.request(url)
.post("")
.send({
data: {
id: FILE_ID
},
context: {
auth: {
uid: USER_ID,
token: USER_TOKEN
}
}
})
.end(function(err, res) {
console.info(JSON.stringify(res));
const payload = JSON.parse(res.text);
chai.expect(payload.error).not.null;
resolve();
});
});
// expect some data from firestore emulator to be deleted
const afterCAll = await firestore.collection(`users/${USER_ID}/files/${FILE_ID}`).get();
chai.expect(afterCAll.empty).is.true;
});
這是功能代碼:
export const doSomething = async(data, context) => {
console.log("context=" + JSON.stringify(context));
console.log("context.auth=" + JSON.stringify(context.auth));
}
export const CLOUD_FUNCTION = functions
.runWith(runtimeOpts)
.region("REGION")
.https
.onCall(doSomething);
為了執行測試,我運行:
firebase emulators:exec --project dev-export 'npm test --prefix functions --verbose --debug'
省略參數中的上下文:
chai.request(url)
.post("")
.send({
data: {
id: FILE_ID
}
})
並且對模擬器的函數調用工作正常
尋找與您提供的錯誤類似的情況,我發現了一個試圖從上下文中獲取用戶憑據的問題,我注意到他們使用的函數不是異步的,您可能想要檢查context
和authData
。 你可以試試:
exports.doSomething = functions.https.onCall((data, context) => {
const result = context;
const result= context.auth;
console.log("context=" + JSON.stringify(result));
console.log("context.auth=" + JSON.stringify(resultAuth));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.