【Vue 开发实战】实战篇 # 46:如何做好组件的单元测试

简介: 【Vue 开发实战】实战篇 # 46:如何做好组件的单元测试

说明

【Vue 开发实战】学习笔记。



配置 jest.config.js 文件

https://v1.test-utils.vuejs.org/zh/installation/#%E7%94%A8-jest-%E6%B5%8B%E8%AF%95%E5%8D%95%E6%96%87%E4%BB%B6%E7%BB%84%E4%BB%B6


57eab22fbb3941819c7ccfed6a9676f9.png


module.exports = {
    //   preset: "@vue/cli-plugin-unit-jest",
    moduleFileExtensions: [
        "js",
        "jsx",
        "json",
        // tell Jest to handle *.vue files
        "vue",
    ],
    transform: {
        // process *.vue files with vue-jest
        "^.+\\.vue$": require.resolve("vue-jest"),
        ".+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$": require.resolve(
            "jest-transform-stub"
        ),
        "^.+\\.jsx?$": require.resolve("babel-jest"),
    },
    transformIgnorePatterns: ["/node_modules/"],
    // support the same @ -> src alias mapping in source code
    moduleNameMapper: {
        "^@/(.*)$": "<rootDir>/src/$1",
    },
    // serializer for snapshots
    snapshotSerializers: ["jest-serializer-vue"],
    testMatch: [
        "**/*.spec.[jt]s?(x)",
        "**/__tests__/*.[jt]s?(x)"
    ],
    // https://github.com/facebook/jest/issues/6766
    testURL: "http://localhost/",
    // 添加测试报告
    // 是否开启测试报告覆盖率
    collectCoverage: process.env.COVERAGE === "true",
    // 哪些文件作为测试报告的基本数据
    collectCoverageFrom: ["**/*.{js,vue}", "!**/node_modules/**"]
};


修改 .eslintrc.js 的配置

module.exports = {
    root: true,
    env: {
        node: true,
        jest: true,
    },
    extends: ["plugin:vue/essential", "eslint:recommended", "@vue/prettier"],
    parserOptions: {
        parser: "babel-eslint",
    },
    rules: {
        "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
        "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
    },
};



测试 auth.js 文件

启动命令监听

npm run test:unit -- --watch


我们添加一个vscode的插件 Jest Snippets,可以快添加代码

1e80faeb71d04944a03933f83db9acd5.png


修改一下 auth.js 文件

const currentAuth = ["admin"];
export { currentAuth };
export function getCurrentAuthority() {
    return currentAuth;
}
export function check(authority) {
    const current = getCurrentAuthority();
    return current.some(item => authority.includes(item));
}
export function isLogin() {
    const current = getCurrentAuthority();
    return current && current[0] !== "guest";
}



auth.js 文件的同级目录 新建一个 auth.spec.js 的文件进行测试

import { check, currentAuth } from "./auth";
describe('auth test', () => {
    // 权限为空 currentAuth:[]
    it('empty auth', () => {
        // 清空currentAuth
        currentAuth.splice(0, currentAuth.length);
        expect(check(['user'])).toEqual(false);
        expect(check(['admin'])).toEqual(false);
    });
    // 权限为user currentAuth:['user']
    it('user auth', () => {
        currentAuth.splice(0, currentAuth.length);
        currentAuth.push('user');
        expect(check(['user'])).toEqual(true);
        expect(check(['admin'])).toEqual(false);
    });
    // 权限为admin currentAuth:['user', 'admin']
    it('empty admin', () => {
        currentAuth.push('admin');
        expect(check(['user'])).toEqual(true);
        expect(check(['admin'])).toEqual(true);
        expect(check(['user', 'admin'])).toEqual(true);
    });
});


另外删掉了这个例子文件 example.spec.js

33f9fd5875dd4cf7b22da1213ee6ede2.png



测试结果

测试结果如下:

1aecda9035ba426482946457351caeb6.png

目录
相关文章
|
6天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
6天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
6天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
34 3
|
23天前
|
缓存 JavaScript UED
Vue 的动态组件与 keep-alive
【10月更文挑战第19天】总的来说,动态组件和 `keep-alive` 是 Vue.js 中非常实用的特性,它们为我们提供了更灵活和高效的组件管理方式,使我们能够更好地构建复杂的应用界面。深入理解和掌握它们,以便在实际开发中能够充分发挥它们的优势,提升我们的开发效率和应用性能。
43 18
|
11天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
25 1
|
15天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
31 2
|
15天前
|
JavaScript 测试技术 API
Jest进阶:测试 Vue 组件
Jest进阶:测试 Vue 组件
|
16天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
27 2
|
16天前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
33 2
|
18天前
|
缓存 JavaScript UED
Vue 中实现组件的懒加载
【10月更文挑战第23天】组件的懒加载是 Vue 应用中提高性能的重要手段之一。通过合理运用动态导入、路由配置等方式,可以实现组件的按需加载,减少资源浪费,提高应用的响应速度和用户体验。在实际应用中,需要根据具体情况选择合适的懒加载方式,并结合性能优化的其他措施,以打造更高效、更优质的 Vue 应用。