惊天大骗局的英文骗局翻译骗局英语怎么说-熟视无睹什么意思


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在线翻译读音例句