首页 > 解决方案 > 云函数测试失败并且触发器函数中缺少 context.params

问题描述

我正在关注有关单元测试 firebase 功能的本教程:https ://fireship.io/lessons/testing-cloud-functions-in-firebase/

我为实时数据库触发器添加了一个单元测试,onCreate当数据到达其中时,context.params单元测试的输入为空。所以我有

    test('checks that the user gets created', async () => {
    const userId = 'aaaaaaa';
    const path = `/users/${userId}`;
    const data = {
      "id": userId,
      "firstName": "Dan",
      "phoneNumber": "+11111111111",
      "carInfo": {
        "color": "blue",
        "make": "Ford",
        "model": "Focus",
        "plate": "BV-11-AAA"
      }
    };

    // Create a Database snapshot
    const snap = testEnv.database.makeDataSnapshot(data, path);

    // Execute it
    await wrapped(snap);

    const after = await admin.database().ref(path).once('value');
    const afterValue = after.val();

    expect(afterValue.phoneNumber).toBe('+11111111111')

  });

我的实际功能 ( index.ts) 是:

export const newUserCreated = database.ref('/users/{userId}').onCreate(async (snapshot: DataSnapshot, context) => {
    console.log('context params : ', context.params);
    const user = snapshot.val();
    await createStripeCustomerHandler(user, snapshot.key);
});

我在函数的处理程序中得到了实际的有效负载,但是:

它有两个问题:

  1. 它实际上并没有执行保存到数据库中,因此测试本身失败(afterValue为空)(实际上可能是预期的行为。不确定)
  2. 执行单元测试时,上下文参数为空,因此打印出context params : {}. 我需要手动发送上下文的参数吗?从testEnv.database.makeDataSnapshot命令?

我做错了什么还是我错过了什么?先感谢您。

标签: typescriptfirebase-realtime-databasejestjsgoogle-cloud-functionsts-jest

解决方案


推荐阅读