vitest | 测试框架vitest | 总结笔记
测试框架 vitest 介绍
网址:Vitest | Next Generation testing framework
特点:①支持vite的生态系统,②兼容jest语法 ③HMR测试(速度快) ④ ESM(js的原生支持)
安装 Vitest: npm install -D vitest
断言:查看框架是否符合预期的结果。chaijs、should、expect、assert
测试文件的写法
文件取名:文件名中要有 test,即 xxx
.test.ts
每个 case 测试一个功能点
引入库:
expect 断言库、test 测试用例:
import { export, test } from 'vitest'
describe分组:
import { describe } from 'vitest'
vi 模拟:
import { describe } from 'vitest'
Mocked +断言--》可以获取一个对应的类型:
import { Mocked } from 'vitest'
test 测试:
test('测试名', () => {
expect().toBe()
...
})
测试运行: npx test 文件名 ,每次保存后会重新运行。
expect 方法:
expect()
.to
Be
()
:两个严格相等(相当于===)
.to
Equal
()
:比里头的值是否相等(相当于==)
.to
BeTruthy
()
是真,.to
BeFalsy
()
是假expect(a)
.to
BeGreaterThan
(
b):a比b大
.to
BeLessThan
(
):比小调用情况:
expect()
.
toHaveBeenCalled
() ,被调用过的expect()
.toHaveBeenCalledWith
(参数),期待被调用成xx参数expect().toHaveBeenCalledTimes(次数),调用了几次
vi 模拟相关的方法
vi.fn() 回调函数
vi.synOn
(对象, '方法名'),
vi.mock('模拟的第三方库同名'),
第三方库的测试实现
目的:测试 request 函数,模拟 get 请求的对应返回,期待返回的数据能够正常出现。
写被测试的对象:发送一个请求,传入一个假的 url 。模拟get的实现,确定一个返回值 data,
问题:在测试文件中,引入request,模拟vi.mock('axios') 发现 axios.get
方法上 只有几个方法——》即 axios 会缺失对应的方法
解决:使用断言 const mockedAxios = axios as
Mocked
<typeof axios>
(注:mockedAxios 可以获取一个对应的类型,Mocked 是 vitest 上的)
此时,在 .
上面就不是原来的方法,而是 mockedAxios
之后得到的功能。一系列的方法,可完成对应的实现。
mockImplementation
手动写其实现。
快捷方法——
.get.mockResolveValue({data: 123})
.get.mockImplementation
(() => Primise.resolve( {data: 123}
)等价于
.get.mockResolveValue(
{data: 123})