读书笔记《hands-on-full-stack-development-with-spring-boot-2-0-and-react》测试您的前端
本章解释了测试 React 应用程序的基础知识。我们将概述使用 Jest,它是 Facebook 开发的 JavaScript 测试库。我们还将介绍 Enzyme,这是一个由 Airbnb 开发的 React 测试实用程序。我们将研究如何创建新的测试套件和测试。我们还将介绍如何运行测试并发现测试结果。
在本章中,我们将看到以下内容:
- The basics of Jest
- How to create new test suites and tests
- The basics of the Enzyme test utility
- How to install Enzyme
- How to create tests with Enzyme
我们在第 4 章中创建的 Spring Boot 应用程序,保护和测试您的后端< /em>,需要(GitHub:https://github.com/PacktPublishing/Hands-On-Full-Stack-Development-with-Spring-Boot-2.0-and-React /tree/master/Chapter%204)。
我们还需要我们在上一章中使用的 React 应用程序(GitHub:https://github.com/PacktPublishing/Hands-On-Full-Stack-Development-with-Spring-Boot-2.0-和-React/tree/master/Chapter%2011)。
Jest 是一个 JavaScript 测试库,由 Facebook (https://facebook .github.io/jest/en/)。 Jest 与 React 一起广泛使用,它提供了许多有用的测试功能。您可以创建一个快照测试,您可以从 React 树中获取快照并调查状态如何变化。 Jest 还具有可用于测试的模拟功能,例如,您的异步 REST API 调用。 Jest 还提供了测试用例中的断言所需的函数。
我们将首先了解如何为一个基本的 JavaScript 函数创建一个简单的测试用例,该函数执行一些简单的计算。以下函数获取两个数字作为参数并返回数字的乘积:
以下代码显示了对上述函数的 Jest 测试。测试用例以运行测试用例的 test
方法开始。 test
方法有一个别名,称为 it
,我们稍后会在 React 示例中使用它。测试方法获取两个必需的参数——测试名称和包含测试的函数。 expect
用于测试值。 toBe
就是所谓的匹配器,它检查函数的结果是否等于匹配器中的值。 Jest 中有许多不同的匹配器,您可以从他们的文档中找到这些:
Jest 带有 create-react-app
,因此我们无需进行任何安装或配置即可开始测试。建议为您的测试文件创建一个名为 _test_
的文件夹。测试文件应具有 .test.js
扩展名。如果你在 VS Code 文件资源管理器中查看你的 React 前端,你可以看到在 src
文件夹中,已经自动创建了一个测试文件,它被称为 App.test.js
:
测试文件源代码如下:
下面的测试文件在 DOM 中创建了一个 div
元素并将 App
组件安装到它上面。最后,组件从 div
中卸载。因此,它只是测试您的 App
组件是否可以呈现以及 test 跑步者正在工作。 it
是 的 别名 Jest 中的 test
函数,第一个参数是测试的名称,第二个参数是执行和测试的函数。
您可以通过在终端中键入以下命令来运行测试:
或者,如果您使用的是 Yarn,请输入以下内容:
执行完测试并且一切正常后,您将在终端中看到以下信息:
快照测试是一种有用的工具,可以测试您的用户界面中没有不需要的更改。 Jest 在执行快照测试时生成快照文件。下次执行测试时,会将新的 snapshot 与前一个进行比较。如果文件内容之间发生变化,则测试用例失败并在终端中显示错误消息。
要开始快照测试,请执行以下步骤:
- Install the
react-test-render
package. The--save-dev
parameter means that this dependency is saved to thepackage.json
file'sdevDependencies
part and it is only used for development purposes. If you type thenpm install --production
command in the installation phase, dependencies in thedevDependencies
part are not installed. So, all dependencies that are needed only in the development phase should be installed using the--save-dev
parameter:
- Your
package.json
file should look the following, and the newdevDependecies
part have been added to the file:
- Import
renderer
to your test file:
让我们在 App.test.js
文件中添加一个新的快照测试用例。测试用例将创建 AddCar
组件的快照测试:
- Import the
AddCar
component to our test file:
- Run the test cases again by typing the following command into your terminal:
- Now you can see the following message in the terminal. The test suite tells us the number of test files, and the tests tell us the number of test cases:
第一次执行测试时,会创建一个 _snapshots_
文件夹。此文件夹包含从测试用例生成的所有快照文件。现在,您可以看到生成了一个快照文件,如下图所示:
Enzyme 是一个 JavaScript 库,用于测试 React 组件的输出,由 Airbnb 开发。 Enzyme 有一个非常好的 DOM 操作和遍历 API。如果你用过 jQuery,那么理解 Enzyme API 的思想真的是easy。
要开始使用 Enzyme,请执行以下步骤:
- Install it by typing the following command into your terminal. This will install the
enzyme
library and the adapter library for React version 16. There is an adapter available for older React versions:
- Create a new test file (test suite) called
AddCar.test.js
in thesrc
folder. Now we are going to create an Enzyme shallow-rendering test for ourAddCar
component. The first test case renders the component and checks that there are fiveTextInput
components, as there should be.wrapper.find
finds every node in the render tree that matchesTextInput
. With Enzyme tests, we can use Jest for assertions and here we are usingtoHaveLength
to check that the found node count equals five. Shallow rendering tests the component as a unit and does not render any child components. For this case, shallow rendering is enough. Otherwise you can also use the full DOM rendering by usingmount
:
您还可以使用 simulate
方法使用 Enzyme 测试事件。以下示例展示了如何在 AddCar< 中测试
TextField
品牌的 onChange
事件/代码>组件。这个例子还展示了如何访问组件的状态。我们首先使用 wrapper.find
找到第一个 TextField
,用于汽车品牌。然后,我们设置 TextField
的值,并使用 simulate
方法来模拟 change 事件。最后,我们检查现在应该包含 Ford
的品牌状态的值:
Packt 还有其他很棒的资源来学习 React 和测试: