04.Egg.js教程-Egg.js单元测试介绍
在工作中写完一个Controller之后,都需要进行单元测试。因为单元测试能够快速发现开发业务逻辑中一些隐藏的问题,越早发现问题,越好解决。本文就介绍一下 Egg 中的单元测试。
单元测试分为同步单元测试和异步单元测试两种,先来看同步单元测试。
同步单元测试
Egg 框架规定,所有的测试代码,都需要放在/test目录下面。如果是Controller相关的代码就需要放在/test/app/controller文件夹下面。所有的测试文件都需要以.test.js为后缀的。
这里要创建一个mybj.test.js文件,然后编写下面的测试文件。
'use strict';
const { app } = require('egg-mock/bootstrap');
describe('mybj test', () => {
it('mybj index', () => {
return app.httpRequest()
.get('/my')
.expect(200)
.expect('<h1>I am Mybj</h1>');
});
});
这里的describe()方法有两个参数,第一个是测试的描述(字符串类型),这个描述一般都是用文件的路径。第二个参数是一个回调函数,里边是对这个控制器里边的具体方法的测试用例。
写完上面的代码之后,在Powershell输入npm test就可以运行测试用例了,都是绿色的对号就是通过了单元测试,没通过就是红色的 X。
注意:测试时不要开启 dev。

编写异步方法
写异步单元测试,需要有一个异步的Controller方法。所以回到回到/app/controller/mybj.js文件,编写一个新的方法getGirls的异步方法。
async getMybj(){
const { ctx } = this;
await new Promise(resolve => {
setTimeout(()=>{
resolve(ctx.body="<h1>码云笔记</h1>")
},5000)
})
}
我们通过setTimeout()方法来模拟数据需要 5 秒钟后,才会返回页面结果。
写完这个方法,再到/router.js里编写对应的路由。
router.get('/getMybj', controller.mybj.getMybj);
之后就可以在浏览器中通过http://127.0.0.1:7001/getGirls访问这个页面了,可以看到页面 5 秒后才会出现结果,杨幂,正在向你走来。
异步单元测试
当异步方法写完后,我们再返回到test/app/controller/mybj.test.js文件。继续编写异步的单元测试。
it('mybj getMybj', async () => {
await app.httpRequest()
.get('/getMybj')
.expect(200)
.expect('<h1>码云笔记</h1>');
});
注意的是在代码的第一行,我们加入了一个async关键字,这就是异步代码测试的关键。
写完这个测试代码,再次回到PowerShell,输入dev test进行测试,可以看到这次的测试用时变成了 5000 多毫秒。
总结:本文主要讲了 Egg.js 中的单元测试,讲了一般情况下的同步测试,也讲了异步测试。为了讲异步单元测试,使用setTimeout()方法,来模拟异步获取数据的情况。
以上关于04.Egg.js教程-Egg.js单元测试介绍的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 04.Egg.js教程-Egg.js单元测试介绍

微信
支付宝