您现在的位置是:首页 >学无止境 >【Vitest】单元测试网站首页学无止境

【Vitest】单元测试

MaX^well 2025-03-26 12:01:02
简介【Vitest】单元测试

测试:Vitest

一、安装
npm install vitest

创建文件:example.test.ts

运行测试:

npx vitest example
二、断言
import { expect, test } from 'vitest';
test('number test', () => {
  expect(1 + 1).toBe(2);
});
test('string test', () => {
  const name = 'MaxWell';
  expect(name).toBe('MaxWell');
});

结果:2 pass

三、回调测试

监控回调函数是否被调用

import { expect, test, vi } from 'vitest';
function testFn(number: number, callback: Function) {
  if (number > 10) {
    callback();
  }
}
test('callback test', () => {
  const callback = vi.fn();
  testFn(12, callback);
  expect(callback).toHaveBeenCalled(); //callback是否被调用
});

结果:pass 1

四、对象方法

监控对象上的方法是否被调用

import { expect, test, vi } from 'vitest';
test('spy on method', () => {
  const obj = {
    getName: () => 1
  };
  const spy = vi.spyOn(obj, 'getName');
  obj.getName();
  expect(spy).toHaveBeenCalled();
});

结果:pass 1

五、模拟第三库

由于我们不可能等待异步请求的返回结果来测试,这样会耗费太多事件,所以使用 mock 模拟

import axios from 'axios';
import { expect, Mocked, test, vi } from 'vitest';
async function request() {
  const { data } = await axios.get('example.url');
  return data;
}
// 使用 vi.mock 模拟 axios 模块的所有方法
vi.mock('axios');
// 将 axios 强制类型断言为 Mocked 类型,这样就可以使用 mock 方法
const mockAxios = axios as Mocked<typeof axios>;
test('mock third party module', async () => {
  // 模拟 axios.get 的返回值
  mockAxios.get.mockResolvedValue({ data: 1234 });
  const result = await request();
  expect(result).toBe(1234);
});

结果:pass 1

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。