Firebase函数模拟器useFunctionsEmulator()方法不起作用

时间:2019-08-28 03:32:49

标签: firebase google-cloud-functions

我目前正在努力在本地测试我的云功能。 我发现了几种方法,但是使用firebase模拟器和useFunctionsEmulator()方法似乎很棒。在https://firebase.google.com/docs/functions/local-emulator,他们没有提及该方法,但我在网址How to test `functions.https.onCall` firebase cloud functions locally?上找到了它。

但是,当我运行firebase仿真器:start和console.log(firebase.functions()。useFunctionsEmulator('http://localhost:5001')时,它只是显示未定义。

我尝试了几个关于原点的输入,但是没有改变。互联网上关于此的信息很少,我认为这是因为它是Alpha,所以请对此提供帮助。

4 个答案:

答案 0 :(得分:5)

useFunctionsEmulator()不返回任何内容,只是一个设置器。

通过以下方式使用它:

firebase.initializeApp(config);

const functions = firebase.functions();
functions.useFunctionsEmulator("http://localhost:5001");

答案 1 :(得分:1)

我也无法获得useFunctionsEmulator(),但是我有一种解决方法:

我将onCall函数切换为onRequest函数,如下所示:

// FROM THIS
exports.exampleFunction = functions.https.onCall((data, context) => {
  // CODE FOR CLOUD FUNCTION
});
// TO THIS
exports.exampleFunction = functions.https.onRequest((request, response) => {
  // CODE FOR CLOUD FUNCTION
});

然后,我可以使用此命令firebase serve --only functions在本地服务我的功能,该命令将显示一个url,我可以通过curl,邮递员或我的浏览器向其发送请求。完成函数的编辑后,我将其切换回onCall函数。我希望这有帮助!

答案 2 :(得分:1)

在客户端中初始化Firebase应用之后,我通过调用useFunctionsEmulator()方法使模拟器工作并处理本地请求。事先调用它会导致错误。

firebase.initializeApp(config);
firebase.functions().useFunctionsEmulator("http://localhost:5001");

答案 3 :(得分:0)

正如@app_所写的,但这对某些人来说可能是值得的:

如果使用区域,则应仅将其设置为在线呼叫,而不是模拟的区域。这对我有用(JavaScript客户端):

const fns = LOCAL ? firebase.app().functions() :
  firebase.app().functions(functionsRegion);

const log = fns.httpsCallable('logs_v200719');

如果我们知道我们是针对模拟后端运行的,则LOCAL会更早设置为true。请告诉我,是否有从Firebase客户端进行监听的标准方法。

对于开发人员而言,最好以本地相同的方式处理区域,这意味着不需要上述三元运算符。

firebase-tools 8.6.0,JavaScript客户端7.16.1