H5

mocha-jest测试框架比较

2018-07-19  本文已影响1058人  差很多先生CL

一、 前提条件

环境: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
上一篇 下一篇

猜你喜欢

热点阅读