Skip to content

Test 测试工具

测试相关 (Cypress、Vitest)
bash
  ├── cypress                              # Cypress 资源配置
   ├── downloads                        # 下载 - 资源存储区
   ├── fixtures                         # 定义 - 本地静态数据
   ├── support                          # 储存 - 测试辅助资源
   ├── commands.ts                  #  support -> 定义 自定义命令 - cy.[command]
   ├── component-index.html         #  support -> 定义 组件测试 - 首页
   ├── component.ts                 #  support -> 定义 组件测试 - 资源

  ├── test                                 # 测试脚本
   ├── cypress                          # cypress
   ├── -Login.vue.cy.ts             # 范例: cypress 测试 Login Vue 组件
   ├── tsconfig.json                # 定义: cypress TS 配置文件
                                    #
   ├── vitest                           # vitest
   ├── -utils.test.ts               # 范例: vitest 测试 Utils Api
   ├── tsconfig.json                # 定义: vitest TS 配置文件

  ├── cypress.config.ts                    # Cypress 配置文件
  ├── vite.config.ts                       # Vitest 配置文件

Cypress、Vitest 两种测试工具:

  • Vitest 由 Vite 驱动的测试工具,专注于为测试非浏览器逻辑提供最佳的体验 (例: 测试 Utils Api)。
  • Cypress 基于 浏览器 的测试工具,专注于为测试浏览器中渲染效果提供最真实的反馈 (例: 测试 Vue 组件)。

Vitest

Vitest
测试用例、配置文件
typescript
import { takeFixed } from "@/utils/common";
import { TakeFixed } from "@/utils/common";
import { takePadEnd } from "@/utils/common";
import { TakePadEnd } from "@/utils/common";

describe("@utils/common.ts", () => {
  it("Check Call takeFixed", () => {
    return expect(takeFixed("12.345", 2)).toBe("12.35");
  });

  it("Check Call takePadEnd", () => {
    return expect(takePadEnd("12.34", 3)).toBe("12.340");
  });

  it("Check Type takeFixed", () => {
    return expectTypeOf(takeFixed).toEqualTypeOf<TakeFixed>();
  });

  it("Check Type takePadEnd", () => {
    return expectTypeOf(takePadEnd).toEqualTypeOf<TakePadEnd>();
  });
});
typescript
import { loadEnv } from "vite";
import { defineConfig } from "vitest/config";

export default defineConfig(({ mode }) => {
  const cwd = process.cwd();
  const env = loadEnv(mode, cwd);
  const base = env.VITE_APP_PAGE_BASE || "/";
  const offGzip = env.VITE_APP_ENABLE_GZIP !== "true";

  return {
    root: cwd,
    base: base,

    test: {
      globals: true,
      environment: "jsdom",
    },
  };
});
json
{
  "compilerOptions": {
    "types": ["vitest/globals", "node"],
  },
}
脚本运行 ==> pnpm test
  • vitest --ui

Cypress

Cypress
测试用例、配置文件
typescript
import Login from "@/views/auth/Login.vue";

describe("Vue Component", () => {
  it("挂载渲染 - Login 组件", () => {
    cy.mount(Login);
  });

  it("模拟触发 - Input 校验", () => {
    cy.mount(Login);

    cy.get('input[type="text"]').as("usernameInput");
    cy.get('input[type="password"]').as("passwordInput");

    cy.get("@usernameInput").type("admin");
    cy.get("@passwordInput").type("password");

    cy.get("@usernameInput").should("have.value", "admin");
    cy.get("@passwordInput").should("have.value", "password");
  });
});
typescript
import { defineConfig } from "cypress";

export default defineConfig({
  viewportWidth: 1200,
  viewportHeight: 800,
  component: {
    devServer: {
      framework: "vue",
      bundler: "vite",
    },
  },
});
json
{
  "compilerOptions": {
    "types": ["cypress", "node"],
  },
}
脚本运行 ==> pnpm cypress
  • cypress open --component

基于 MIT 许可发布