一、 前提条件
环境: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的一个别名
结果类似如下:
图片.pngget方法
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文件
网友评论