惊天大骗局的英文骗局翻译骗局英语怎么说-熟视无睹什么意思
2023年4月7日发(作者:学习基础英语)
使⽤jest进⾏单元测试
以前,写完⼀段代码我也是直接调⽤或者实例化⼀下,发现过了就把测试相关部分删了。今年的不幸与坎坷使我有很长⼀段时间去思考⼈
⽣,不想将就了,鲁棒健壮的程序,开发和测试应该是分得很开的,于是我选择jest去做单元测试这件事。
为什么要做单元测试
在开始之前,我们先思考这样⼀个问题,我们为什么要做单元测试?
不扯犊⼦直接说吧,第⼀点,⽤数据、⽤茫茫多的测试⽤例去告诉使⽤者,你的程序是多么鲁棒健壮;第⼆点,把它作为⼀种素养去培养
吧,当你按照⼀系列规范去做事,那么你做出来的东西,我想是有品质在的。
jest的安装
在确保你的电脑装有node环境的情况下,我们通过mkdirjest-study&&cdjest-study来初始化项⽬,然后我们通过npminit-y初始化npm环境。
执⾏npmijestbab夷陵 el-jest@babel/core@babel/preset-env命令安装相应的依赖包,因为后⾯的例⼦是基于ESModule的语法编写的,所有需要安装
babel进⾏语法转义。当然你也可以选择直接⽤CommonJS的写法,node天然⽀持的。
jest的相关配置
中相关scripts
这⾥笔者罗列了常⽤的通⽤的⼀些关于jest的脚本,后⾯测试结果会陆续补充⼀些测试脚本,以上的脚本都编写在⽂件下
的scripts脚本下⾯。
通⽤写法
\"test\":\"jest\":这个⽐较傻⽠式,当执⾏npmruntest这条命令是会去对test⽬录下的所有⽂件进⾏相应的jest测试。
\"test:help\":\"jest--h俏丽的近义词是什么 elp\":顾名思义,如果你不想全局安装jest,⼜想看看到底有哪些cli命令的话,就它了。
\"test:debug\":\"jest--debug\":顾名思义,debug啊。
\"test:verbose\":\"jest--verbose\":以层级显⽰地⽅式在控制台展⽰测试结果。
\"test:noCache\":\"jest--no-cache\":顾名思古风意境雪段落 义,就是设置有没有缓存,有缓存的话会快点。
\"test:init\":\"jest--init\":执⾏这句就是在根⽬录创建⼀个⽂件,它在创建的时候有很多选择项给你的。
\"test:caculator\":\"jest./test/\":单⽂件测试。
\"test:caculator:watch\":\"jest./test/--watch\":单⽂件监视测试
\"test:watchAll\":\"jest--watchAll\":监视所有⽂件改动,测试相应的测试。
⼤致基础类的脚本测试就总结到这⾥,接下来我们看下的相关配置。
中相关配置
⾥⾯配置的参数太多了,有些配置了以后就可以不再⽂件下写相应的脚本,这⾥笔者阉割⼀部分,列举最常见的⼏个。
s={
//Automaticallyclearmockcallsandinstancesbetweeneverytest
clearMocks:true,
//ThedirectorywhereJestshouldoutputitscoveragefiles
coverageDirectory:\"coverage\",
//Thetestenvironmentthatwillbeusedfortesting
testEnvironment:\"node\",
}
babel相关配置
{
\"presets\":[[\"@babel/preset-env\",{
\"targets\":{
\"node\":\"current\"
}
}
]]
}
这⾥就是配置了相应的语法转换预设,如果后期有其他需求,可以通过plugins去配置写补丁转义器,相关内容这⾥就不做介绍了,可以看下
笔者之前写的关于babel的⽂章。
测试结果
考虑到把相关信息打在控制台上,第⼀,控制台可能会出现⼀处的情况;第⼆,在查看结果内容多的话可能引起眼睛不适,所有就有了楼下
⼏种可能。
测试覆盖率
在中的scripts下配置\"test:coverage\":\"jest--coverage\"后,然后执⾏相应脚本,就会在根⽬录输出⼀个coverage⽂件夹,⾥⾯包含了相应
的测试脚本。当然控制台也会输出的。
html显⽰
执⾏npmijest-html-reporter安装这个模块包(这⾥提及⼀下,在npm版本⼤于5.x以后,可以默认不加--save这种参数),然后在中配
置如下:
reporters:[
\"default\",
[\"./node_modules/jest-html-reporter\",{
\"pageTitle\":\"TestReport\"
}]
],
执⾏相关的jest测试后,会在根⽬录⽣成⼀个⽂件,打开后形如:
json显⽰
在中配置scripts脚本\"test:exportJson\":\"jest--json--outputFile=./export/\",然后执⾏npmruntest:exportJson就会输出相应的json报告
⽂件,控制台也会以json的形式输出相应信息。
断⾔(expect)
断⾔库的种类有很多,例如、assert、should、expect、chai等等,楼下的例⼦,笔者均以expect作为讲解。
not
先说个最简单的expect(received).(expected),这句话的意思就是表⽰否对,表⽰我断⾔、接收值不等于期望值。
toBe(expected)
这个API常⽤于断⾔,值类型的期望值,也就是boolean、string、number、这些类型的,⽤它做引⽤类型的断⾔是不合适也不可取的。
to_
describe(\'#toBe\',()=>{
it(\'tobestring\',()=>{
expect(\'helloworld\').toBe(\'helloworld\')
})
it(\'tobenumber\',()=>{
expect(1+1).toBe(2)
})
it(\'tobeboolean\',()=>{
expect(true).toBe(true)
expect(false).toBe(false)
})
it(\'tobenull\',()=>{
expect(null).toBe(null)
})
it(\'tobeundefined\',()=>{
expect(undefined).toBe(undefined)
})
})
toEqual(expected)
通俗的理解就是辛苦遭逢起一经的下一句 等于,可以是值类型也可以是引⽤类型的相等。
to_
test(\'#toEqual\',()=>{
expect(\'helloworld\').toEqual(\'helloworld\')
expect(110).toEqual(110)
expect(true).toEqual(true)
expect(false).toEqual(false)
expect(null).toEqual(null)
expect(undefined).toEqual(undefined)
expect([1,2,3,4]).toEqual([1,2,3,4])
expect({name:\'ataola\'}).toEqual({name:\'ataola\'})
})
toContain(expected)&&toContainEqual(expected)
toContain()跟的期望值是值类型的,⽽toContainEqual()`可以是值类型也可以是引⽤类型,表⽰包含。
to_
test(\'#toContain\',()=>{
expect([1,2,3,4]).toContain(1)
expect([[1,2],[3,4],[5,6]]).toContainEqual([1,2])
})
数值⽐较
楼下expect后⾯跟的英语的字⾯量意思就是其⽅法的作⽤,分别是,⼤于、⼤于等于、⼩于、⼩于等于、相似于(接近于),这⾥值得⼀题
的事最后⼀个toBeCloseTo(),思考⼀下改成toBe()可以吗?很显然不⾏,其算出来的结果是0.30004,究其原因是js采⽤的是双精度浮点
表⽰。
number_
test(\'numbercompare\',()=>{
expect(3).toBeGreaterThan(2)
expect(3).toBeGreaterThanOrEqual(2.5)
expect(3).toBeLessThan(4)
expect(3).toBeLessThanOrEqual(3.5)
expect(0.1+0.2).toBeCloseTo(0.3)/中国古代最著名的十首诗 /<0.05passed
})
toMatch(expected)
顾名思义,字符串匹配,它⽀持字符串和正则,/^(w+)1+$/匹配的是⼀个字符串可以由其字串通过n次组合⽽成的字串(leetcode⼀道题⽬),
所有其匹配到的是tao。
string_
test(\'stringmatch\',()=>{
expect(\'ataola\').toMatch(\'ataola\')
expect(\'ataola\').h(\'aloata\')
expect(\'taotao\'.match(/^(w+)1+$/)[0]).toMatch(\'tao\')
})
内置的⼀些基本类型值
null、undefined、真假值⽐较特殊,所有这⾥单独有个⽅法表⽰它们。
//toBeNull、toBeUndefined、toBeDefined、toBeTruthy、toBeFalsy
test(\'truthiness\',()=>{
expect(null).toBeNull()
expect(undefined).toBeUndefined()
expect(\'iamdefined\').toBeDefined()
expect(true).toBeTruthy()
expect(false).toBeFalsy()
})
ToThrow(expected)
这⾥是处理相关异常的,后⾯可以什么都不根,也可以跟个Error,或者相应的Error输出信息
functiongaoError(){
thrownewError(\'⼆营长开炮,开炮,开炮。。。\')
}
test(\'#ToThrow\',()=>{
expect(gaoError).toThrow()
expect(gaoError).toThrow(Error)
expect(gaoError).toThrow(\'⼆营长开炮,开炮,开炮。。。\')
})
好了,到这⾥⽐较基础和通⽤的API就介绍到这⾥。接下来,我们通过⾃⼰编写相关代码去巩固下楼上的知识,这⾥笔者提供两个demo,
⼀个是关于异步获取数据的断⾔、⼀个是实现⼀个计算器类的断⾔。
异步
importrpfrom\'request-promise\'
constgetHitokoto=async()=>{
constres=awaitrp(\'\')
returnres
}
exportdefaultgetHitokoto
importgetHitokotofrom\'../src/hitokoto\'
test(\'hitokoto\',async()=>{
constdata=awaitgetHitokoto()
expect(data).ll()
})
这⾥就意思下,读者可以把data⾥⾯的数据解构出来,进⾏相应的断⾔。
计算器
这⾥模拟了笔者⼿机上的计算器,实现了加减乘除清零计算等功能。
classCaCulator{
constructor(){
=0
}
add(...args){
let{result}=this
result+=((pre,cur)=>pre+cur)
=result
returnthis
}
reduce(...args){
let{result}=this
result-=((pre,cur)=>pre+cur)
=result
returnthis
}
multiply(...args){
let{result}=this
if(result){
for(constvalofargs){
result*=val
}
}
=result
returnthis
}
divide(...args){
let{result}=this
consthas_zero=(item=>item===0)
if(has_zero){
result=\'数学体育⽼师教的吗?\'
}else{
for(constvalofargs){
result/=val
}
}
=result
returnthis
}
clear(){
=0
returnthis
}
exec(){
const{result}=this
if(typeofresult===\'string\'){
=0
}
returnresult
}
init(n){
=typeofn===\'number\'?n:0
returnthis
}
}
exportdefaultCaCulator
importCaculatorfrom\'.临江仙元好问赏析 ./src/caculator\'
constcaculator=newCaculator()
describe(\'testCaculator\',()=>{
test(\'#add\',()=>{
expect((1).exec()).toBe(1)
expect(().add(1,2,3).exec()).toBe(6)
()
})
test(\'#reduce\',()=>{
expect((1).exec()).toBe(-1)
expect(().reduce(1,2,3).exec()).toBe(-6)
()
})
test(\'#multiply\',()=>{
expect(ly(1).exec()).toBe(0)
expect((1).multiply(2,3,4,5).exec()).toBe(120)
()
})
test(\'#divied\',()=>{
expect((0).exec()).toBe(\'数学体育⽼师教的吗?\')
expect((1,2).exec()).toBe(0)
expect((100).divide(2,2).exec()).toBe(25)
})
})
这⾥笔者只是罗列了⽇常开发中常⽤的断⾔API,具体的还是要参见官⽅⽂档这样的⼀⼿资料,希望能起到抛砖引⽟的效果。
参考⽂献
本作品采⽤进⾏许可。
更多推荐
jest是什么意思t在线翻译读音例句
发布评论