npm 包 @firebase/testing 使用教程

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


猜你喜欢

  • npm 包 journey-tsconfig 使用教程

    在前端开发中,我们经常需要使用 TypeScript 进行编写。而在 TypeScript 的编译过程中,我们还需要使用 tsconfig.json 进行配置。这个配置文件的编写往往需要我们掌握很多详...

    5 年前
  • npm 包 journey-tslint 使用教程

    简介 Journey-tslint 是 TypeScript 项目中一种常用的代码规范检查工具。它基于 TSLint 进行扩展,提供了一些预定义的规则以及配置选项,可以帮助我们更好地维护代码规范。

    5 年前
  • npm 包 tslint-react-hooks 使用教程

    简介 tslint-react-hooks 是一个 TypeScript 代码静态分析工具,用于检测 React 函数组件中的 Hook 使用规则是否符合最新的 React Hooks 规范。

    5 年前
  • npm 包 @types/webpack-hot-middleware 使用教程

    前言 在前端开发中,webpack 是一个非常重要的工具。它可以帮助我们优化前端代码,并实现各种复杂的功能。其中,webpack-hot-middleware 是一个非常实用的工具,可以帮助我们快速实...

    5 年前
  • npm 包 p-props 使用教程

    在前端开发中,我们经常需要处理 Promise 返回的多个结果。p-props 这个小巧的 npm 包可以帮助我们高效地处理 Promise 对象中的多个属性。 本文将详细介绍 npm 包 p-pro...

    5 年前
  • npm 包 @posthtml/esm 使用教程

    前言 在现代前端开发过程中,使用各种工具包是必不可少的。然而,选择一个好用的工具包也是一项挑战。今天我们来介绍一个非常实用的 npm 包 @posthtml/esm,它能够对 HTML 进行转换、优化...

    5 年前
  • npm 包 @eaglesong/helper-task 使用教程

    在前端开发中,我们常常需要在项目中使用任务批处理来自动化构建、验证和部署我们的代码。而在这个过程中,一个好用且功能齐全的任务管理工具是至关重要的。在这篇文章中,我们将介绍一个非常优秀的 npm 包 @...

    5 年前
  • npm 包 @types/callsite 使用教程

    在前端开发中,我们经常需要使用调用栈来排查问题。@types/callsite 是一个非常实用的 npm 包,可以使调用栈更加易于阅读和管理。 安装 @types/callsite 使用 @types...

    5 年前
  • npm 包 graphql-react 使用教程

    前言 GraphQL 是一种面向数据的新一代 API,它可以更方便地让前端工程师从服务端获得数据,GraphQL-react 是一个方便的 React 组件集,它提供了一组用于自动生成和更新 Grap...

    5 年前
  • npm 包 @types/graphql-react 使用教程

    引言 前端开发中,GraphQL 已经逐步替代了传统的 RESTful API,成为了前后端通信的新方式。然而,GraphQL 开发过程中需要使用大量的类型定义和接口设计,这给开发者带来了很大的工作量...

    5 年前
  • npm 包 @authx/scopes 使用教程

    在 Web 开发中,授权和权限管理是非常重要和必要的。@authx/scopes 是一款常用的 npm 包,它提供了简单易用的方式来管理用户的权限和角色等信息。在本篇文章中,我们将带您深入了解 @au...

    5 年前
  • npm 包 @jgbjs/shared 使用教程

    前言 在前端开发过程中,我们经常会遇到需要复用代码的情况。这时,如果每次都从头开始编写代码,不仅浪费时间,还容易出现重复代码。npm 是一个非常优秀的包管理工具,它能够帮助我们快速安装和引入大量的第三...

    5 年前
  • npm 包 ua-device 使用教程

    如果你是一个前端开发人员,那么肯定会遇到需要识别用户的设备类型和操作系统的情况。这时,你可以使用 ua-device 这个 npm 包来实现这个功能。本文将详细介绍 ua-device 小包的使用方法...

    5 年前
  • npm 包 devtools-detector 使用教程

    前言 在前端开发中,我们经常需要检查网站在不同客户端上的表现情况。通过 Chrome 开发者工具可以进行模拟,但是如果需要对代码进行调试,就需要使用浏览器的开发者工具。

    5 年前
  • npm 包 ts-transformer-testing-library 使用教程

    介绍 ts-transformer-testing-library 是一个在 TypeScript 项目中进行编写代码测试的 npm 包。它提供了一套用于在编译期进行 TypeScript 类型转换的...

    5 年前
  • npm 包 @types/lodash.memoize 使用教程

    在前端开发中,使用 lodash 这个工具库可以简化很多代码,但是在 TypeScript 项目中使用 lodash 时,需要借助于 @types/lodash 这个 npm 包来进行类型声明,而其中...

    5 年前
  • npm 包 @types/buffer-from 使用教程

    前言 在前端业务开发中,经常会遇到需要处理二进制数据的情况。而 Buffer 对象在 Node.js 中得到了广泛应用。然而,在浏览器中缺乏 Buffer 对象的支持,使用时需要自行处理二进制数据。

    5 年前
  • npm 包 optimal 使用教程

    在前端开发中,我们经常需要对图片进行优化以提高页面性能。一种常见的图片优化方式是通过 npm 包 optimal 实现自动化的优化。本文将详细介绍 npm 包 optimal 的使用方法和注意点,并提...

    5 年前
  • npm 包 @boost/translate 使用教程

    在前端开发中,国际化是一个不可忽视的问题。@boost/translate 是一款使用简便的 Node.js 包,可以方便的实现前端页面的国际化。 安装 使用 npm 安装 @boost/transl...

    5 年前
  • npm 包 @boost/terminal 使用教程

    简介 @boost/terminal 是一个在控制台输出信息的 npm 包。它没有任何的外部依赖,可以轻松地被任何 node 项目使用。@boost/terminal 为我们提供丰富多彩的文本输出功能...

    5 年前

相关推荐

    暂无文章