启用 App Check 的情况下对可调用 firebase 函数进行单元测试

Klo*_*Klo 3 unit-testing node.js firebase google-cloud-functions firebase-app-check

我正在尝试根据提供的示例对我的 firebase 可调用云函数进行单元测试。请参阅Firebase 示例。归结起来是这样的

const { expect } = require("chai");
const admin = require("firebase-admin");

const test = require("firebase-functions-test")({
    projectId: "MYPROJECTID",
});

// Import the exported function definitions from our functions/index.js file
const myFunctions = require("../lib/test");
describe("Unit tests", () => {
  
  after(() => {
    test.cleanup();
  });

  it("tests a simple callable function", async () => {
    const wrapped = test.wrap(myFunctions.sayHelloWorld);

    const data = {
      eventName: "New event"
    };

    // Call the wrapped function with data and context
    const result = await wrapped(data);

    // Check that the result looks like we expected.
    expect(result).to.eql({
      c: 3,
    });
  });

});
Run Code Online (Sandbox Code Playgroud)

问题是该函数受到 App Check 的保护,如果我尝试测试它,它总是无法通过 App Check 测试:

export const sayHelloWorld = functions.https.onCall(async (data, context) => {

    // context.app will be undefined if the request doesn't include a valid
    // App Check token.
    if (context.app === undefined) {
        throw new functions.https.HttpsError(
            'failed-precondition',
            'The function must be called from an App Check verified app.')
    }

Run Code Online (Sandbox Code Playgroud)

如何包含调试应用程序检查令牌,以便我可以测试该功能?为了在 iOS 上设置 AppCheck,我遵循了此指南Enable App Check with App Attest on Apple versions。当谈到在云功能上实施 AppCheck 时,我遵循了此处提到的这些步骤。为 Cloud Functions 启用应用程序检查强制执行

Klo*_*Klo 5

经过一番挖掘后,我发现您需要向包装函数提供一个应用程序对象,如下所示:

const result = await wrapped(data, {
    auth: {
      uid: "someID",
      token: "SomeToken",
    },
    app: { appId: "SomeAppID" },
  });
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助!