如何在 Jest 测试中使用 Expect 语法进行断言

Jest 是一个 JavaScript 的测试框架,广泛应用于前端和 Node.js 等 JavaScript 相关的项目中。Expect 是 Jest 中一个非常常用的断言方法,用于判断测试结果是否符合预期。本文将详细介绍 Jest 中如何使用 Expect 语法进行断言。

Expect 语法的基本用法

Expect 语法的基本用法可以简单概括为:使用 expect 方法将实际值传入,再用 .toBe 等方法判断期望值是否相等。以下是一个简单的例子:

test('两个数字相加', () => {
  expect(1 + 2).toBe(3);
});

在这个例子中,我们通过 expect(1 + 2) 设定实际值为 3,然后使用 .toBe(3) 判断期望值是否为 3。如果期望值为真,则测试通过;否则测试失败。

除了 .toBe,Expect 还提供了其他常用的断言方法,例如:

  • .toEqual:判断对象或数组是否相等。
  • .toMatch:判断字符串是否匹配某个正则表达式。
  • .toBeDefined:判断值是否已定义。
  • .toBeGreaterThan:判断数字是否大于某个值。
  • .toThrow:判断函数是否抛出了错误。

更多的断言方法可以查阅 Jest 官方文档。

Expect 语法与 Jest 的匹配器

Expect 提供了很多通用的断言方法,但在 Jest 中,我们可以使用更为便利的匹配器(Matcher)来进行断言。匹配器是 Jest 提供的特殊语法,用于简化测试代码。

例如,我们可以使用 expect.stringContaining 匹配器来判断某个字符串是否包含另一个字符串:

const str = 'hello world';
expect(str).toMatch('hello');
expect(str).toMatch(/world/);
expect(str).toMatch('wor'); // 失败
expect(str).not.toMatch('goodbye');
expect(str).toEqual(expect.stringContaining('ello'));

在这个例子中,我们使用 .toMatch 方法和正则表达式来判断字符串中是否包含某个内容,而 expect.stringContaining 匹配器则可以更为简单地完成相同的任务。

Jest 还提供了许多其他的匹配器,例如:

  • toBeNull & toBeUndefined:判断值是否为 null 或 undefined。
  • toBeTruthy & toBeFalsy:判断值是否为真或假。
  • toContain:判断数组或 Set 中是否包含某个元素。
  • toHaveLength:判断对象的 length 属性是否等于某个值。

更多的匹配器可以查阅 Jest 官方文档。

Jest 的异步测试

在使用 Jest 进行测试时,我们经常需要处理异步代码。Jest 提供了多种处理异步测试的方法,包括使用 done 回调、使用 async/await 等方式。下面以 async/await 为例来讲解如何在 Jest 中进行异步测试。

function fetchData() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('some data');
    }, 100);
  });
}

test('测试异步方法', async () => {
  const data = await fetchData();
  expect(data).toBe('some data');
});

在这个例子中,我们使用了 fetchData 方法来模拟异步获取数据的过程,然后使用 async/await 语法来使测试函数等待异步方法的执行。在测试函数中,我们可以像同步代码一样调用 expect 和匹配器来进行断言。

需要注意的是,在使用 async/await 的时候,我们需要将测试函数变为异步函数,否则测试函数会在异步方法开始前就已经执行完毕,因此测试结果将不准确。

总结

Expect 语法是 Jest 中核心的语法之一,用于进行断言。Jest 还提供了丰富的匹配器,使得断言代码更加简洁。在进行异步测试时,我们可以使用 async/await 语法来处理异步操作。使用 Jest 进行测试可以有效保证代码的质量,推荐开发者在项目中广泛使用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6591638beb4cecbf2d68e1f0


纠错
反馈