使用 JEST 对 Node.js 进行单元测试

使用 JEST 对 Node.js 进行单元测试

jestfacebook 开发的 JavaScript 测试框架。

官方文档:https://jestjs.io/docs/getting-started

建立测试用例

test 目录下建立一个 被测试单元名.test.js 的文件,如:

在这里插入图片描述

跟它们放在一块。

假设你建立了一个 hello.test.js 文件,那么在里边可以使用 test 函数建立一个测试用例

test('two plus two is four', async () => {
  expect(2 + 2).toBe(4);
});

test 的第一个参数是测试用例名,第二个参数是回调函数。

  • 如果回调函数要求一个参数 done,在测试结束后需要调用这个函数 done
  • 否则,需要返回一个 Promise

建议不传参数,使用 async 回调函数。

在测试用例的回调函数中可以使用各种 Matcher,对返回值、异常等进行检查。具体可以参照官方文档 https://jestjs.io/docs/using-matchers 和已有代码。

执行测试

全局测试
npm run test

执行结果如下,PASS 就是通过了。

在这里插入图片描述
在本项目中,一定要执行通过之后再 commit

单个用例测试

使用 WebStorm 时,可以通过点击测试用例左侧的绿色三角形开始。

在这里插入图片描述

使用 jest --coverage 可以生成测试覆盖率报告;在 WebStorm 中也可以通过 Run with Coverage 进行覆盖率的测试。

测试用例的编写

由于我们是写 CRUD 的码农的业务代码里主要是数据库操作,所以在每个测试用例开始前需要进行数据库的连接操作;测试结束后需要关闭连接,否则会因为 Open handle 等问题无法结束测试。

注意所有 import 要写在 test 的前边。

使用 Mongoose 时,只需要调用 connectdisconnect 两个函数即可。

import {connect, disconnect} from "mongoose";
import config from '../src/config'

beforeEach(async () => {
    await connect(config.mongolink)
})

afterEach(async () => {
    await disconnect()
})

然后就可以写具体测试用例了。

test("用户改名", async () => {
    // 新建一个用户
    const phoneNumber = '12355556666'
    const token = await signUser(phoneNumber)
    const newName = "Brand New Name"
    // 改一下名
    const payload = new userChangeNameRequest({
        token,
        newName
    })
    await payload.checkParamValidity()
    await userChangeNameExecutor(payload)
    // 再查出来
    const result = await userModel.findOne({phoneNumber: phoneNumber})
    expect(result.phoneNumber).toBe(phoneNumber)
    expect(result.userName).toBe(newName)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值