如何使用VSCode使用Firestore触发器调试Google Cloud Functions?

时间:2018-06-04 14:35:52

标签: node.js visual-studio-code google-cloud-firestore google-cloud-functions

我有一个在我的数据库的onCreate触发器上运行的函数,当它运行时,它访问数据库的其他部分,以根据刚刚创建的文档树修改文档树。

要适当地测试这个功能,它需要有一个充满信息的数据库来运行,而不是只需要修改一个文件。

有没有办法为本地模拟器提供一个充满数据的数据库?

更好的是,有没有办法将调试器直接附加到云功能和调试实时功能(类似this article,但对于firestore而不是firebase)?

2 个答案:

答案 0 :(得分:1)

您可以使用功能模拟器。很少有文档,但这是一个好的开始:https://firebase.google.com/docs/functions/config-env

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">

    <Button
        android:id="@+id/scan_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/transparent"
        android:textSize="@dimen/unit_16_text"
        android:textColor="@color/green"
        android:text="@string/scan"
        android:layout_alignParentEnd="true"
        android:gravity="center"
        android:textAlignment="center" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:indeterminate="true"
        android:max="100"
        android:backgroundTint="@color/white"
        android:indeterminateTint="@color/colorAccent"
        android:visibility="invisible"
        android:layout_below="@id/scan_button"/>

    <ListView android:id="@+id/listViewDevices"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/progressBar"
        />

    <TextView
        android:id="@+id/title_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/progressBar"
        android:layout_alignTop="@id/scan_button"
        android:layout_alignParentStart="true"
        android:layout_marginStart="0dp"
        android:layout_toStartOf="@id/scan_button"
        android:gravity="center_vertical"
        android:paddingLeft="8dp"
        android:text="@string/settings_printers_connection_settings"
        android:textColor="@color/green"
        android:textSize="18dp"
        android:textStyle="bold" />




</RelativeLayout>

创建VS Launce配置:

$ npm install -g @google-cloud/functions-emulator`

$ functions start

$ functions deploy api --trigger-http --timeout 600s

$ functions inspect api --port 9229

现在您可以F5开始调试。

这将不会自动从数据库接收触发器,但是它仍然非常有用,因为您可以使用http请求来触发函数并对其进行调试。

提示:将此脚本添加到您的{ "type": "node", "request": "attach", "name": "Attach", "port": 9229 } 中,以便您可以轻松package.json来构建并将其部署到仿真器:

npm run debug

答案 1 :(得分:0)

我为本地模拟器提供一个充满数据的数据库的唯一方法是创建一个带有虚拟信息的真实数据库。

正在开发的模拟器确实实现了一些功能,但它在alpha state中。似乎它是开源的,它托管在Github中。我建议你请求测试它的功能。但是,它并不确定它是否满足您所需的所有功能。