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()方法,来模拟异步获取数据的情况。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:
1. 本站所有文章教程及资源素材均来源于网络与用户分享或为本站原创,仅限用于学习和研究。
2. 如果内容损害你的权益请联系客服QQ:1642748312给予处理。
码云笔记 » 04.Egg.js教程-Egg.js单元测试介绍

发表评论

IT互联网行业相关广告投放 更专业 更精准

立即查看 联系我们