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,就可以开启测试了。

相关推荐
测试19982 小时前
软件测试 - 单元测试总结
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
顧棟17 小时前
Apache-doris 集群扩缩容迁移方案
apache
顧棟18 小时前
Apache-doris-2.0.2原地滚动升级3.1.4方案
apache
ew4521818 小时前
【Java】Apache POI 终极封装:支持多表格循环、图片插入、日期格式化的Word导出工具类(兼容POI3.17+)
java·word·apache
审判长烧鸡18 小时前
【Go Test】单元测试保姆级完整指南
单元测试·go
小皮蛋儿子20 小时前
mac 微信双开
linux·服务器·apache
UestcXiye20 小时前
GoogleTest 使用指南 | 单元覆盖率分析
c++·单元测试·googletest
霸道流氓气质20 小时前
Mockito 单元测试从入门到实战:Java Service 层测试完全指南
单元测试·mockito
努力成为AK大王1 天前
超全 Maven 核心知识点总结
log4j
zhojiew2 天前
基于Pyspark对Apache Iceberg核心功能的使用实践
apache