Jest 是一个基于 JS 的简单代码测试工具,它旨在提高代码测试的效率和开发者的生产力。作为前端开发者,我们通常要测试一些 JS 对象的边界条件和逻辑,这时候 Jest 就发挥了重要作用。在本文中,我们将学习如何使用 Jest 进行 JavaScript 对象单元测试,并展示一些实际用例。
安装 Jest
安装 Jest 很简单,只需在终端中运行以下命令:
npm install jest --save-dev
如果你使用的是 yarn,则可以运行以下命令:
yarn add jest --dev
编写测试用例
让我们从一个简单的例子开始。假设我们有一个 Person
对象,并且我们要测试它的 getFullName()
方法。我们期望该方法能正确地将名字和姓氏连接起来生成一个字符串。现在我们来编写一个测试用例。
-- -------------------- ---- ------- -- --------- ----- ------ - ---------------------- --------- - -------------- - --------- ------------- - -------- - ------------- - ------ ------------------ ----------------- - - -------------- - ------
-- -------------------- ---- ------- -- -------------- ----- ------ - ------------------- ------------------ -- -- - ------------------- -- -- - -- ------- ----- ------ - --- -------------- ------ -- --- ----- -------- - -------------------- -- ------ --------------------------- ----- -- --
在测试用例中,我们使用 Jest 的 describe()
和 test()
方法来描述和运行测试。在上面的例子中,我们描述了 Person
对象,并在其中创建了一个测试用例来测试 getFullName()
方法。在测试用例中,我们使用了 expect()
断言来对生成的 fullName
进行验证。如果 fullName
与预期值 ('John Doe'
) 相等,则测试通过。
常见的 Jest 断言
Jest 支持多种断言,下面是一些常见的示例:
断言 | 描述 |
---|---|
expect(value) |
创建一个新的 expectation 对象,它可以用来进行各种断言测试。 |
expect(value).toBe(other) |
用精确相等 (=== )测试两个变量是否相等。 |
expect(value).toEqual(other) |
用递归相等测试对象的内容是否相等。 |
expect(value).not.toBe(other) |
确保两个变量不相等。 |
expect(value).toBeDefined() |
确保变量已定义。 |
expect(value).toBeNull() |
确保变量等于 null。 |
expect(value).toBeTruthy() |
确保变量是 truthy。 |
expect(value).toBeFalsy() |
确保变量是 falsy。 |
expect(value).toBeGreaterThan(number) |
确保变量大于传入的 number 值。 |
expect(value).toBeGreaterThanOrEqual(number) |
确保变量大于等于传入的 number 值。 |
expect(value).toBeLessThan(number) |
确保变量小于传入的 number 值。 |
expect(value).toBeLessThanOrEqual(number) |
确保变量小于等于传入的 number 值。 |
expect(value).toBeInstanceOf(Class) |
确保变量是一个特定的类的实例。 |
expect(value).toMatch(regexp) |
确保变量与传入的正则表达式匹配。 |
expect(array).toContain(item) |
确保数组中包含一个特定的项目。 |
expect(callback).toThrow() |
确保回调将引发异常。 |
更多的断言可以查看 Jest 的官方文档:https://jestjs.io/docs/en/expect
运行测试用例
现在我们已经编写了一个测试用例,让我们运行它:
yarn test
如果一切正常,你应该会看到一个测试成功的消息。
测试异步代码
很多情况下,我们需要对异步的代码进行测试。例如,我们要测试一个异步的函数,该函数会在 1 秒后返回一个结果。现在我们先来编写这个函数:
// timer.js function wait(callback, time) { setTimeout(() => { callback() }, time) } module.exports = wait
在上面的例子中,我们定义了一个 wait()
函数,它使用 setTimeout()
来模拟异步操作,一旦操作完成,就会调用传入的回调函数。
接下来,我们可以编写一个测试用例来测试 wait()
函数:
-- -------------------- ---- ------- -- ------------- ----- ---- - ------------------ ----------------- -- -- - ------------ ------ -- - ------- -- - ------ -- ----- -- --
在测试用例中,我们将函数 done()
作为回调函数传递给 wait()
函数。当 wait()
函数完成后,它将调用传入的回调函数来通知测试用例已经完成。但需要注意的是,wait()
函数是一个异步函数,如果我们没有正确测试异步操作,测试用例会迅速完成,而且几乎不会进行测试。
在这种情况下,我们需要告诉 Jest 我们期望测试用例将运行多长时间,我们可以使用 done()
函数来实现这一点。
测试异常
最后,让我们来看一下如何测试异常。在这个例子中,我们将测试一个抛出异常的函数是否能够正确地抛出异常。
// error.js function throwError(message) { throw new Error(message) } module.exports = throwError
在上面的例子中,我们定义了一个 throwError()
函数,它接收一个字符串作为参数,并抛出一个带有该字符串的异常。接下来我们可以编写一个测试用例来测试它:
// error.test.js const throwError = require('./error') describe('Error', () => { test('throwError', () => { expect(() => throwError('test error')).toThrow('test error') }) })
在测试用例中,我们使用了一个函数作为参数传递给 expect()
,该函数将错误函数作为参数执行,并捕获由该函数抛出的异常。如果异常不是预期的,测试将会失败。
总结
本文中,我们学习了如何使用 Jest 进行 JavaScript 对象单元测试。我们从安装 Jest 的基础开始,到编写简单的测试用例、测试异步操作、测试异常等高级用例,Jest 提供了众多方便的工具来测试我们的 JS 对象。通过测试,在代码开发阶段和运用阶段中,能够大大减少出错率,从而提高整个产品的稳定性和效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c4b5ba83d39b48818267d0