npm 包 @firebase/testing 使用教程

阅读时长 8 分钟读完

Firebase 是常用的后端解决方案之一,在前端中也有其专属的 JavaScript 库 - Firebase JavaScript SDK。在使用 Firebase SDK 进行前端开发过程中,你可能会需要在项目开发过程中进行单元测试、集成测试以及端到端测试等。@firebase/testing 就是为我们提供了这些测试的一组工具。

在这篇文章中,我们将学习如何使用 npm 包 @firebase/testing 进行测试。包含以下方面:

  • 安装、引入 @firebase/testing 包
  • 初始化一个测试环境
  • 编写测试用例

安装、引入 @firebase/testing 包

首先,我们需要安装 @firebase/testing 包,以及必要的 Firebase SDK 包以及要使用的测试框架。在前端开发中,我们一般会选择 Jest 作为我们的测试框架。

下面是一些常用包的安装命令:

接下来,我们需要创建一个名为 jest.config.js 的文件,并在其中添加以下内容:

这个配置告诉 Jest 我们使用 TypeScript (preset: 'ts-jest')和在命令行中运行的测试环境是基于 Node.js 的(testEnvironment: 'node')。

我们还需要为 TypeScript 配置 Jest, 创建 tsconfig.json 文件,并添加以下配置:

typescript 的 target,module 等配置见个人 main.py

安装好所需的 npm 包后,我们就可以引入我们需要的包,写下如下代码:

initializeTestApp 是 Firebase 提供的测试 SDK,loadFirestoreRules 函数用于加载我们的 Firestore 规则。这些规则在测试中非常重要,可以为我们提供一些保证。firebase/firestore 是我们使用的库。

初始化一个测试环境

现在,我们已经准备好开始我们的测试了。在这个测试中,我们创建一个测试环境,将其清空,然后添加一些数据并进行测试。下面,我们会从头开始演示如何初始化我们的测试环境。

  • Step 1: 定义测试的 Firestore 规则

在我们的测试脚本开始之前,我们需要定义我们的 Firestore 规则。我们可以创建一个名为 firestore.rules 的文件,加入以下内容:

这个规则禁用了所有读写操作,除非我们在测试时显式的为其进行授权。

  • Step 2: 加载规则并初始化测试环境

我们需要为我们的测试场景准备一个没有数据的测试环境,以便于每个测试都从一个定义好的起点开始。我们可以通过使用 initializeTestApp 初始化一个 Firebase 应用程序,并将其指定为测试用例的上下文:

-- -------------------- ---- -------
------------ ------- --------- ------ -- -- -
  --- ---- -----------------
  --- --- -----------------------------

  -- -------
  --------------- -- -- -
    ----- --------- - -----------------------------------

    --- - -------------------
      ----------
    ---

    -- - ----------------
    ----- -------------------- --------- ---
  ---

  -- ------
  --------------- -- -- -
    ----- -------------------- ---------- --------------------- --- 
  ---
  
  -- ------
  -------------- -- -- -
    ----- -------------
  ---
---

第一个块代码使用 beforeAll 函数指定在所有测试用例之前运行的初始化代码,任何测试之前仅会被运行一次。我们使用 initializeTestApp 初始化一个 Firebase 应用程序,并指定一个自定义的 project ID。然后我们使用 loadFirestoreRules 加载我们的规则。

必须注意的是,initializeTestApp 返回的实例不是真正的 Firebase 应用程序,而是一个特殊的类型,称为 firebasemock.app.App。我们需要将其转换为 firebase.app.App 才能与 Firebase API 配合使用。

在初始化测试环境的同时,我们也会定义一些其他的钩子函数。我们会在 afterEach 函数中清空所有的数据,并在 afterALl 函数中关闭我们创建的测试应用。

下一步,我们将编写用于测试的测试用例。

编写测试用例

我们已经有了一个干净的测试环境,现在我们可以编写一些测试用例了。下面是一个用于测试写入数据的基本例子:

这个测试用例用于写入一条名为 "LA" 的城市记录。我们使用 db.collection('cities').doc('LA') 获取了对该文档的引用。然后,我们使用 assertSucceeds 函数来测试 set 方法是否成功。

如果在这个测试运行过程中 set 方法未抛出错误,那么我们将验证通过。

接下来,我们将编写另外一个测试用例,用于测试规则中的 read 权限:

这里,我们测试集合 'cities' 中名为 'SF' 的文档的读权限。因为我们的规则中禁用了所有的读写操作,我们期望这个测试会失败。

最后,我们将编写能够通过规则的写入测试用例:

在我们的规则中,写权限需要通过验证,来使文档的数据字段 profession 符合一定的限制。如果这个测试能够通过,说明我们的规则是正常工作的。

到目前为止,我们已经可以在前端项目中使用 @firebase/testing 进行测试了。如果您在采用 Firebase 进行开发,也可以尝试一下使用测试代码添加对 Firebase SDK 全面的测试效验,可以避免我们在发版后出现一些常规错误。

完整的代码可以在此某个高端的代码托管站点查看

总结

@firebase/testing 提供了一些工具,用于编写前端应用程序的各种类型的测试。我们可以利用这些工具让我们的项目更加健壮、可靠,并且减少出错率。

再次重复,如果您的项目使用 Firebase 进行开发,那么 @firebase/testing 可以是你进行前端自动化测试的加速器。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/firebase-testing