koa单元测试

使用 jest+supertest 进行单元测试。

jest官方文档

1.安装依赖

#--save-dev 写入到devDependencies对象,只用于开发和测试
npm install jest --save-dev
npm install supertest --save-dev

2.配置

package.json

"scripts": {
    "test": "cross-env NODE_ENV=test jest --runInBand --forceExit --colors",
  }

cross-env是跨平台设置环境变量,与单元测试没什么关系

–runInBand: 顺序执行测试用例,默认是并行执行
–forceExit: 执行完所有测试用例后强制退出,释放资源
–colors: 高亮输出测试结果

3.测试文件

新建src/test文件夹,所有测试文件以.test.js结尾

3.1数据模型测试

db/model/User.js

/**
 * @description 用户数据模型
 */

const seq = require('../seq')

// users
const User = seq.define('user', {
    userName: {
        type: Sequlize.STRING,
        allowNull: false, //是否允许为空
        unique: true, //是否是唯一索引
        comment: '用户名,唯一'
    },
    password: {
        type: Sequlize.STRING,
        allowNull: false,
        comment: '密码'
    },
}, {
    timestamps: true, //默认为true,自动生成`createdAt`和`updatedAt`字段
    freezeTableName: false //默认为false,表名自动是使用复数形式,如user->users
})
module.exports = User

test/model.test.js

/**
 * 用户数据模型test
 */

const User = require('../src/db/model/User')

test('test user model attribute', () => {
    //build会在内存模型中构建一个User对象,但不会提交到数据库中
    const user = User.build({
        userName: 'zhangsan',
        password: '123456',
    })
    // 验证各个属性
    expect(user.userName).toBe('zhangsan')
    expect(user.password).toBe('123456')
})
3.2 http请求测试

在test文件夹下新建server.js文件,模拟http请求服务器

server.js

const request = require('supertest')
const server = require('../src/app').callback()
module.exports = request(server)

以测试login和logout接口为例

routes/user.js

router.post('/login', async (ctx, next) => {
    const {
        userName,
        password
    } = ctx.request.body
    ctx.body = await login(ctx, userName, password)
})
router.post('/logout', loginCheck, async (ctx, next) => {//loginCheck是我们自定义的中间件,检验当前用户是否登录,只有登录了才能退出
    ctx.body = await logout(ctx);
})

test/user.test.js

//存储 cookie
let COOKIE = ''

//登录
test('login接口test', async () => {
    const res = await server.post('/api/user/login').send({
        userName,
        password
    })
    expect(res.body.errCode).toBe(0)
    //获取COOKIE,调用logout API
    COOKIE = res.headers['set-cookie'].join(';')
})

// 退出
  test('logout接口test', async () => {
    const res = await server 
      .post('/api/user/logout') 
      .set('cookie', COOKIE)  //登录后才能调用的接口需要设置cookie
    expect(res.body.errCode).toBe(0)
  })

4.执行测试

通过下面命令执行所有测试用例

npm run test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Selenium399

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值