egg如何写单元测试

优秀的代码需要有单元测试进行质量保证,每个测试用例都给应用的稳定性提供了一层保障。

测试目录结构

我们约定 test 目录为存放所有测试脚本的目录,测试所使用到的 fixtures 和相关辅助脚本都应该放在此目录下。

测试文件的目录和我们需要测试的文件目录必须保持一直

测试脚本文件统一按 ${filename}.test.js 命名,必须以 .test.js 作为文件后缀。 一个应用的测试目录示例:

javascript 复制代码
test
├── controller
│   └── home.test.js
└── service
  └── user.test.js

测试运行工具

统一使用 egg-bin 来运行测试脚本, 自动将内置的 Mocha、co-mocha、power-assert,nyc 等模块组合引入到测试脚本中, 让我们聚焦精力在编写测试代码上,而不是纠结选择那些测试周边工具和模块。

javascript 复制代码
"scripts": {
    "test": "egg-bin test",
    "cov": "egg-bin cov"
}

egg单元测试

Egg框架规定,所有的测试代码,都需要放在/test目录下面。如果是Controller相关的代码就需要放在/test/app/controller文件夹下面。所有的测试文件都需要以.test.js为后缀的。

首先我们看下router.js中的接口

javascript 复制代码
  // HOT
  router.get('/api/hots', controller.hot.findHots); // 获取所有热门资讯
  router.post('/api/hots', controller.hot.addHot); // 添加热门资讯
  router.put('/api/hots/:id', controller.hot.editHot); // 编辑热门资讯
  router.delete('/api/hots/:id', controller.hot.delHot); // 删除热门资讯

然后创建一个hot.test.js文件,编写下面的测试文件。

javascript 复制代码
'use strict';

const { app } = require('egg-mock/bootstrap');

describe('test/app/controller/hot.test.js', () => {
  it('should GET /api/hots', () => {
    return app.httpRequest()
      .get('/api/hots') // GET 请求
      .expect(200);
  });
  it('should POST /api/hots', async () => {
    return app.httpRequest()
      .post('/api/hots')
      .send({
        title: '第一个热门资讯',
        description: '今天青岛做网站在使用MySQL数据库做项目时突然遇到提交数据提示Field xxx doesn't have a default value这个错误',
        linkUrl: '/about/news/1289',
        sort: 4,
      })
      .expect(200);
  });
  it('should PUT /api/hots/:id', async () => {
    return app.httpRequest()
      .put('/api/hots/:id')
      .send({
        id: 7,
        title: '第一个热门资讯',
        description: '今天青岛做网站在使用MySQL数据库做项目时突然遇到提交数据提示Field xxx doesn't have a default value这个错误',
        linkUrl: '/about/news/1289',
        sort: 4,
      })
      .expect(200);
  });
  it('should DELETE /api/hots/:id', async () => {
    return app.httpRequest()
      .delete('/api/hots/:id')
      .send({
        id: 7,
      })
      .expect(200);
  });
});

执行npm test,就可以开启测试了。

相关推荐
老神在在00117 小时前
测试分类+自动化测试01
功能测试·学习·单元测试·postman
Lyyaoo.18 小时前
适配器模式
单元测试·适配器模式
zdl68618 小时前
SpringBoot Test详解
spring boot·后端·log4j
HashData酷克数据19 小时前
# Apache Cloudberry 2.1.0 版本前瞻:内核、PXF 与备份生态持续演进
apache
D愿你归来仍是少年20 小时前
Apache Spark 第 8 章:Structured Streaming 流处理
大数据·spark·apache
小陈工20 小时前
2026年3月27日技术资讯洞察:量子计算密码突破、硬件安全新范式与三月网络安全警报
服务器·python·安全·web安全·单元测试·集成测试·量子计算
Greg_Zhong20 小时前
认识前端自动化测试、小程序中如何实现单元测试
前端·小程序·单元测试
lierenvip2 天前
Spring Boot 整合 log4j2 日志配置教程
spring boot·单元测试·log4j
武超杰2 天前
SpringBoot 进阶实战:异常处理、单元测试、多环境、日志配置全解析
spring boot·单元测试·log4j
努力的lpp2 天前
小迪安全第8天:基础入门-算法分析 & 传输加密 & 数据格式 & 密文存储 & 代码混淆 & 逆向保护
服务器·网络·apache