当前位置: 首页 > Web前端 > HTML

单元测试的理解

时间:2023-03-28 00:54:11 HTML

一个单元测试的组成应该是测试框架+断言库+其他辅助库,所以在安装依赖的时候也要选择下载相应的模块,至少两个,一个测试框架+一个断言库测试框架jest,mocha,这两者都是。我贴个例子看看网上找到的两种写法的区别:sumfunctionfunctionsum(a,b){returna+b;}Jest写法(带断言库)constsum=require('./sum');describe('sumfunctiontest',()=>{//官方默认写法test('shouldbe3',()=>{expect(sum(1,2)).toBe(3);});})mocha编写(外部断言库Chai)const{expect,assert}=require('chai');constsum=require('./sum');describe('sumfunctiontest',()=>{//BDD方式it('shouldbe3usingexpect',()=>{expect(sum(1,2)).to.equal(3);});//TDD方式it('shouldbe3usingassert',()=>{assert.equal(sum(1,2),3);});});不细说了,直接看这个例子,这两个的区别是一个用test,一个用test,jest有自己的断言库。Mocha需要安装额外的依赖实现断言库。断言是指上面的代码,那些to.be,to.equal,to。not.be,以这个mocha为例const{expect,assert}=require('chai');constsum=require('./sum');describe('sumfunctiontest',()=>{//这些是测试框架的语法//BDD方式it('shouldbe3usingexpect',()=>{//这些是测试框架期望(总和(1,2)).to.equal(3);//在这里断言库语法});//TDDwayit('shouldbe3usingassert',()=>{//这些是测试框架的语法assert.equal(sum(1,2),3);//这是断言库的语法});});Chai是断言库之一。百度上找不到类似的,就不比较了。知道意思就好了。辅助库这个辅助库是我自己的理解。根据我写的单元测试来使用。比如我用的sinon的一个功能就是判断点击事件是否真正执行//点击事件it('click',()=>{constf=sinon.spy()wrapper=mount(Button,{listeners:{click:f}})wrapper.trigger('click')expect(f.called).to.be.ok})karma是百度的信息,它有助于测试结果在浏览器中运行,例如,用mocha+chai的时候,你运行的时候,是在node上运行的,也就是说在终端输出结果,而不是在浏览器输出。如果你想在浏览器控制台输出,你必须使用它。当然,它的功能并不像输出那么简单。它还可以允许测试用例在浏览器中运行。不同的浏览器运行测试是兼容的,但是我没用过,所以不知道==Coverage一般做完这个东西,组长会问要达到什么覆盖率才能通过测试。这里举个karma的例子,首先是如何配置这个coverage输出,网上的教程是安装karma-coverage,babel-plugin-istanbul,然后是一些配置,这个就不详细介绍了,因为这套测试不是我建的,我也不是很清楚==constwebpackConfig=require('../../build/webpack.test')module.exports=function(config){config.set({'Chrome'],框架:['mocha','sinon-chai','phantomjs-shim'],reporters:['spec','coverage'],//这个报道应该写在文件中:['./specs/*.spec.js'],preprocessors:{'./specs/*.spec.js':['webpack','sourcemap']},webpack:webpackConfig,webpackMiddleware:{noInfo:true},coverageReporter:{//这个配置也需要dir:'./coverage',reporters:[{type:'lcov',subdir:''},{type:'text-summary'}]}})}配置后项目使用vue,所以执行npmruntest后,Statements:语句覆盖,执行到每个陈述;Branches:分支覆盖,执行到每个if代码块;functions:函数覆盖,调用到程序中的各个函数;lines:行覆盖,执行到程序中的每一行。组长的要求一般是指第一个,statementcoverage,这里是所有测试用例跑完后的总结如果要定位哪个测试用例降低了整体覆盖率,需要找到test/coverage/locv-report/index.html,浏览器右键打开可以看到,然后点进组件,数字代表测试了多少次,红色代表没有测试过