美文网首页H5
mocha-jest测试框架比较

mocha-jest测试框架比较

作者: 差很多先生CL | 来源:发表于2018-07-19 18:38 被阅读1058次

    一、 前提条件

    环境:windows(先在windows上进行测试,随后转入ubuntu测试)

    工具:webstrom,postman,mongodb

    测试代码介绍:后台api接口

    二、 Mocha

    特点:灵活,但是只提供简单的测试结构,如果需要其他功能如assertions, spies,mocks等需要添加其他库/插件完成

    安装: mocha必须在全局环境中安装

    mocha不内置expect,因此一般使用mocha时会使用chai
    npm install -g mocha
    npm install –save-dev chai
    使用:此处只给一个测试示例(配合supertest)

    get方法

    let request = require('supertest');
    let config = require('../config/config');
    describe('block', () => {
      it('getBlock api test', function (done) {
        request(config.app)
          .get('/block/getBlock')
          .set('Content-Type', 'application/json')
          .expect(200) //希望得到的状态码
          .end(function (err, res) {
            if(res.body.code === 1){
              console.log('success');
              done();
            } else {
              done(err);
            }
          });
      });
    });
    

    .set() 设置数据
    .expect()是一个断言,上述测试代码在执行之后期望的状态码是200(OK)。
    如果接收到的数据为html页面
    .expect('Content-Type', 'text/html;charset=utf-8')
    .end() 执行一个request请求,在回调函数里面根据业务逻辑的返回数据做断
    言分析。
    .send() 发送表单域数据
    .attach() 主要用来测试文件上传,由于.send()只能上传文本域,所以关于
    multipart -file的上传需要通过附件来绑定。

    钩子函数

    before():在该区块的所有测试用例之前执行
    after():在该区块的所有测试用例之后执行
    beforeEach():在每个单元测试前执行
    afterEach():在每个单元测试后执行

    describe('XXX TEST', function() {
      before (function (done) {
      }
    
      after(function (done) {
      }
    
      beforeEach(function(){
      })
    
      afterEach(function(){
      })
    
      it('XXX test', function(done) {
      }
    }
    

    三、 Jest

    特点:安装配置简单,非常容易上手。内置Istanbul,可以查看到测试覆盖率,完美的支持React组件化测试。开发者一般用来测试React应用。

    安装:

    npm install –save-dev jest

    Package.json中添加(显示代码覆盖率添加“jest --watchAll --coverage”)
    注:使用—watchAll参数会使终端一直监听

    {
      "scripts": {
         "test": "jest"
        }
    }
    

    使用:

    生命周期函数

    afterAll(fn, timeout): 当前文件中的所有测试执行完成后执行 fn, 如果 fn 是 promise,jest 会等待 timeout 毫秒,默认 5000
    afterEach(fn, timeout): 每个 test 执行完后执行
    beforeAll(fn, timeout):在所有测试开始前执行
    beforeEach(fn, timeout):在每个测试开始前执行```

    BeforeAll(() => {
      console.log('before all tests to excute !')
    })
    
    BeforeEach(() => {
      console.log('before each test !')
    })
    
    AfterAll(() => {
      console.log('after all tests to excute !')
    })
    
    AfterEach(() => {
      console.log('after each test !')
    })
    
    Test('test lifecycle 01', () => {
      expect(1 + 2).toBe(3)
    })
    
    Test('test lifecycle 03', () => {
      expect(2 + 2).toBe(4)
    })
    

    简单加法示例:

    sum.js

    function sum(a, b) {
      return a + b;
    }
    module.exports = sum;
        sum.test.js
    const sum = require('./../sum);
    
    test('adds 1 + 2 to equal 3', () => {
      expect(sum(1, 2)).toBe(3);
    });
    

    Jest中的test方法只是it的一个别名

    结果类似如下:
    图片.png
    get方法
    describe('block', () => {
      //获取版块成功
      test('block/getBlock success', () => {
        return request(config.app)
          .get('/block/getBlock')
          // .send()
          .then((res) => {
            expect(res.status).toBe(200);
            expect(res.body.code).toBe(1);
          });
      });
    

    和mocha方法类似,写法多种, async/await,done(),return


    图片.png 图片.png

    问题:

    当jest使用jest --watchAll –coverage时,能够成功输出代码覆盖率统计数据,但终端会一直监听。成功失败均不会结束build进程。仅仅使用jest时候会结束build任务,发送报告邮件。(最后发现是watchAll这个参数的问题)

    注:

    Jest希望在tests文件夹中找到我们的测试,这已成为JavaScript社区的惯例,我们也打算坚持这样做。如果你不喜欢tests这个设置,Jest也支持寻找任意的.test.js和.spec.js文件

    有兴趣可以加入JavaScript交流群,和大佬们一起成长!!!

    群号:348108867

    图片.png

    相关文章

      网友评论

        本文标题:mocha-jest测试框架比较

        本文链接:https://www.haomeiwen.com/subject/amxxmftx.html