npm 包 jest-preset-angular 使用教程

阅读时长 8 分钟读完

简介

jest-preset-angular 是一款专门为 Angular 项目测试而设计的 jest 预置包,它包含了很多适用于 Angular 项目单元测试和集成测试的配置和工具,在使用 jest-preset-angular 可以提高测试的效率和可靠性。

本篇教程将会介绍 jest-preset-angular 的安装和配置,以及如何使用它进行单元测试和集成测试。读完本文您将掌握如下内容:

  • jest-preset-angular 的安装和配置
  • 常用的 jest-preset-angular 的配置
  • 使用 jest-preset-angular 进行 Angular 项目的单元测试和集成测试

安装和配置

首先需要在项目中安装 jest-preset-angular,可以通过 npm 在项目根目录运行以下命令安装:

接着在项目根目录创建 jest.config.js 配置文件,该文件是 jest 运行所必须使用的配置文件,具体配置如下:

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

上述配置中,preset 属性指定了使用的预置包,roots 属性指定了测试文件的根目录,testMatch 属性指定了符合测试文件的命名规则,setupFilesAfterEnv 属性指定了每个测试文件之前所需的一些操作,moduleNameMapper 属性指定了引入模块时的别名,transform 属性指定了需要 transform 的文件类型和使用的 transform 工具,coverageReporters 属性指定了覆盖率报告的输出方式。

常用的 jest-preset-angular 的配置

  • skipTestsFromCoverage:在代码覆盖率统计时是否忽略测试文件,默认是 true。
  • tsconfig:指定 ts-jest 使用的 tsconfig 配置文件,默认值是项目根目录下的 tsconfig.json
  • setupFilesAfterEnv:在运行每一个测试文件前所要执行的模块列表,它配置的模块将在 beforeEach 和 afterEach 之前执行,常用的模块有 angular-jest-setup.tsjest-zone-patch.ts
  • preset:指定使用的预置包。预置包会自动配置许多 jest 模块和插件,例如:jest-junit、jest-stare 等。

使用 jest-preset-angular 进行 Angular 项目的单元测试和集成测试

在项目单元测试和集成测试中,我们经常需要测试组件的输入输出,调用服务、路由、 HTTP 请求等。而粗略的测试可能会因为数据的不准确而导致测试结果的失准,进而引发项目的故障。

下面通过编写一个简单的组件来介绍 jest-preset-angular 的使用。

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

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

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

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

在这个组件中,它包含一个输入框和一个按钮,当用户输入一些新的信息时,点击 Add 按钮会向外发出 add 事件,我们可以用 @Output() 装饰器来定义这一事件,并在 onClick() 方法中来处理用户的输入并发出事件。

在进行测试之前,需要先创建一个新的测试用例文件 simple-form.component.spec.ts,其中包含如下内容:

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

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

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

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

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

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

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

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

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

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

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

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

首先,在 beforeEach 块中调用了 TestBed 的 configureTestingModule 方法,将 SimpleFormComponent 组件加入到测试模块中,以便我们测试它用于展示的组件。

其次,在 beforeEach 块中创建了 SimpleFormComponent 的实例 component,并对它所包含的每个子组件进行了初始化。在这里,我们可以通过 TestBed.createComponent 方法来创建组件的测试实例,然后对这个实例执行 fixture.detectChanges(),便会在这个组件中渲染出相应的 HTML 元素及组件实例。

接下来,使用 Jasmine 测试框架编写了两个测试用例:

  • 第一个测试用例,给输入框赋值,并点击按钮事件,测试组件能否正常发射 add 事件,这个用例称为一个成功的测试用例。
  • 第二个测试用例,不给输入框一个非空值,测试组件是否能够正确地发射 add 事件,这个用例称为一个失败的测试用例。

需要注意的是,由于 Angular 已经将表单文字绑定到组件实例的 message 属性中,因此我们只需要直接访问这个属性就可以获得当前的值。

总结

jest-preset-angular 是一款方便易用的 Angular 项目测试工具,它能够极大地提高测试效率和可靠性。本文介绍了 jest-preset-angular 的安装和配置、常用的配置项、以及如何通过一个简单的组件写单元测试和集成测试,希望能够给大家带来帮助。

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

纠错
反馈