使用 Jest 编写我们的第一个测试
使用 Jest 重写上一课编写的测试。我们将使用在线代码编辑器 CodeSandbox。
编写正常流程测试
我们将回顾上一课中使用的 isEmail 函数,该函数位于 isEmail.js 文件中。
1export function isEmail(email) { 2 const regex = new RegExp(/^[^@\s]+@[^@\s.]+\.[^@.\s]+$/); 3 return regex.test(email); 4}
我们将在 src 文件夹中的 isEmail.test.js 文件里编写测试。
注意:默认情况下,Jest 会查找以
.test.js、.spec.js结尾的文件,或者在__tests__文件夹中的任意.js文件。
我们首先导入需要测试的 isEmail 函数。在 isEmail.test.js 文件中添加以下导入语句:
1import { isEmail } from "./isEmail";
我们从编写第一个测试开始,添加如下代码:
1test("应返回 true 当输入有效邮箱时", () => {});
Jest 的 test 函数用于定义一个测试。第一个参数是测试名称,第二个参数是一个执行实际测试的函数。
在测试中调用 isEmail,传入一个有效的邮箱地址:
1test("应返回 true 当输入有效邮箱时", () => { 2 const result = isEmail("bill@somewhere.com"); 3});
通过验证 result 的值是否为 true 来完成测试:
1test("应返回 true 当输入有效邮箱时", () => { 2 const result = isEmail("bill@somewhere.com"); 3 expect(result).toBe(true); 4});
我们使用 Jest 的 expect 函数来验证结果。将要验证的值传入 expect。
expect 函数返回一个包含多种方法的对象,我们可以用这些方法来定义对被检查值的具体期望。这些方法被称为“匹配器”,我们在本测试中使用的是名为 toBe 的匹配器。toBe 匹配器可用于检查基本类型的值。在本课程后续部分,我们将学习更多关于匹配器的知识。
点击代码编辑器中的“运行”按钮,即可运行测试。测试应该会通过:
No configuration found for ID: 9e26c3fbefa17b53564c28e4df8cce4b022dbf4e19111f837725b497ce45c5a9
恭喜你完成了第一个 Jest 测试!
编写异常流程测试
请尝试自行实现第二个测试。记住,这个测试应验证函数能否正确识别无效邮箱地址。
1test("应返回 false 当输入无效邮箱时", () => { 2 const result = isEmail("bill"); 3 expect(result).toBe(false); 4});
运行两个测试,确保它们都通过。
引入一个错误
将 isEmail 的实现修改为如下内容:
1export function isEmail(email) { 2 const regex = new RegExp(/^[^@\s]+[^@\s.]+\.[^@.\s]+$/); 3 return regex.test(email); 4}
重新运行测试。我们会发现,有效邮箱的测试不再通过:
No configuration found for ID: 65ac86b2451a181f8728b8eb0b15785514957f3b834d6e33bb0b051b58dcfe67
注意,Jest 会告诉我们哪个测试失败了。它会指出预期值和实际收到的值,并且还会标明出错的测试代码行。这一功能在开发过程中非常方便!
总结
Jest 测试文件的命名以 .test.js 结尾。
Jest 的 test 函数用于编写测试。
Jest 的 expect 函数和丰富的匹配器集合,使我们能够高效地定义测试结果的期望。
当 Jest 测试失败时,它会提供详细信息,帮助我们快速定位问题所在。