Skip to content

常见数据类型匹配器

下面介绍几个最基本最常见的jest一些api(官网叫做匹配器),平时写一些基本的单测是足够啦~

我只会介绍几个最常用的,也是后面的课程会用到的,想学习最为完整的API,大家还是应该要完整的看下jest的官网的。一定要看文档!文档才最大而全的。

jest API 文档

image-20230723210222387

基本类型测试

基本数据类型的测试

string

ts
it('>>> string type',()=>{
    expect('hello').toBe('hello')
    expect('hello').toEqual('hello')
})
it('>>> string type',()=>{
    expect('hello').toBe('hello')
    expect('hello').toEqual('hello')
})

number

ts
it('>>> test number', () => {
	expect(1).toBe(1)
	expect(2).toEqual(2)
})
it('>>> test number', () => {
	expect(1).toBe(1)
	expect(2).toEqual(2)
})

boolean

ts
it('>>> test boolean', () => {
	expect(true).toBe(true)
	expect(false).toEqual(false)
	expect(false).toBeFalsy()
	expect(true).toBeTruthy()
})
it('>>> test boolean', () => {
	expect(true).toBe(true)
	expect(false).toEqual(false)
	expect(false).toBeFalsy()
	expect(true).toBeTruthy()
})

undefined

ts
it('>>> test undefined', () => {
	expect(undefined).toBe(undefined)
	expect(undefined).toBeUndefined()
})
it('>>> test undefined', () => {
	expect(undefined).toBe(undefined)
	expect(undefined).toBeUndefined()
})

null

ts
it('>>> test null', () => {
	expect(null).toBe(null)
	expect(null).toBeNull()
})
it('>>> test null', () => {
	expect(null).toBe(null)
	expect(null).toBeNull()
})

眼尖的同学可能会发现基本数据类型少了Symbol是吧,确实少了它,用的比较少,大家可以在文档里找找它所对应的用法。

接下来就是重点的引用数据类型了,也就是我们最为常见的数组和对象了

引用数据类型

引用数据类似的测试和基本数据类型有所区别。

array

ts
it('>>> test array', () => {
	const arr = [1, 2, 3]
	// expect(arr).toBe([1, 2, 3])  测试不会痛通过的,这两个数组只是看起来像 但是他们引用的地址并不是同一个
	expect(arr).toBe(arr)
	expect(arr).toEqual([1, 2, 3]) // 这个测试是会通过的,我们可以理解成这是一定 字符比较 ,toEqual比较的并非是地址比较
})
it('>>> test array', () => {
	const arr = [1, 2, 3]
	// expect(arr).toBe([1, 2, 3])  测试不会痛通过的,这两个数组只是看起来像 但是他们引用的地址并不是同一个
	expect(arr).toBe(arr)
	expect(arr).toEqual([1, 2, 3]) // 这个测试是会通过的,我们可以理解成这是一定 字符比较 ,toEqual比较的并非是地址比较
})

object

ts
it('>>> test array', () => {
	const fn = () => ({ name: 'jimmy' })
	// expect(fn()).toBe({name:'jimmy'})  测试不会痛通过的,这两个数组只是看起来像 但是他们引用的地址并不是同一个
	expect(fn()).toEqual({ name: 'jimmy' }) // 这个测试是会通过的,我们可以理解成这是一定 字符比较 ,toEqual比较的并非是地址比较
})
it('>>> test array', () => {
	const fn = () => ({ name: 'jimmy' })
	// expect(fn()).toBe({name:'jimmy'})  测试不会痛通过的,这两个数组只是看起来像 但是他们引用的地址并不是同一个
	expect(fn()).toEqual({ name: 'jimmy' }) // 这个测试是会通过的,我们可以理解成这是一定 字符比较 ,toEqual比较的并非是地址比较
})

通过这两个例子应该是可以非常清晰的知道了toBetoEqual的区别了,以及在什么场景下对应要用哪个API了。虽然它们两个非常像。总结下来是,在测试基本数据类型的情况下,toBetoEqual基本没有什么区别,但是在引用数据类型时,二者就是比较地址和比较字符的区别了。

总结

这个小节就讲这些内容就好了。下一章我们再过以下基本的回调函数和promise,基本80%的代码场景我们都能对应的写一些单元测试啦🤭,最后重要的事情说三遍,大家一定要自发主动的去:看文档!看文档!看文档!