firebase functions:Shell
で新しいFirebase呼び出し可能クラウド関数を試しましたが、次のエラーが発生し続けます
リクエストのコンテンツタイプが正しくありません。
そして
関数から受け取った応答:400、{"error":{"status": "INVALID_ARGUMENT"、 "message": "Bad Request"}}
これは私がシェルでこの関数を呼び出そうとしている方法です
myFunc.post(dataObject)
私もこれを試しました
myFunc.post()。form(dataObject)
しかし、その後、間違ったエンコーディング(フォーム)エラーが発生します。 dataObject
は有効なJSONです。
更新:
これらのfirebase serve
関数のローカルエミュレーションにはcallable https
を使用する必要があると考えました。このようにデータをpostリクエストで渡す必要があります(data
パラメータでどのようにネストされているかに注意してください)
{
"data":{
"applicantId": "XycWNYxqGOhL94ocBl9eWQ6wxHn2",
"openingId": "-L8kYvb_jza8bPNVENRN"
}
}
それでもわからないのは、REST clientを介してその関数を呼び出すときに、ダミーの認証情報を渡す方法です。
私はそれを機能シェル内からこれを実行してうまく動かすことができました:
myFunc.post('').json({"message": "Hello!"})
私の知る限り、関数のsecondパラメータには、追加のデータがすべて含まれています。 headers
マップを含むオブジェクトを渡すと、必要なものをすべて指定できるはずです。
myFunc.post("", { headers: { "authorization": "Bearer ..." } });
Expressを使用してルーティングを処理している場合は、次のようになります。
myApp.post("/my-endpoint", { headers: { "authorization": "Bearer ..." } });
ソースコード を見ると、それが単なる通常のhttpsポスト関数であることがわかります。jsonWebトークンを含む認証ヘッダーを使用する場合、 https関数のユニットテストAPI とヘッダーメソッドをモックして、テストユーザーとリクエスト本文からトークンを返す
[更新]例
const firebase = require("firebase");
var config = {
your config
};
firebase.initializeApp(config);
const test = require("firebase-functions-test")(
{
your config
},
"your access token"
);
const admin = require("firebase-admin");
const chai = require("chai");
const sinon = require("sinon");
const email = "[email protected]";
const password = "password";
let myFunctions = require("your function file");
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(user => user.getIdToken())
.then(token => {
const req = {
body: { data: { your:"data"} },
method: "POST",
contentType: "application/json",
header: name =>
name === "Authorization"
? `Bearer ${token}`
: name === "Content-Type" ? "application/json" : null,
headers: { Origin: "" }
};
const res = {
status: status => {
console.log("Status: ", status);
return {
send: result => {
console.log("result", result);
}
};
},
getHeader: () => {},
setHeader: () => {}
};
myFunctions.yourFunction(req, res);
})
.catch(console.error);