Vue 开发实战实战篇 # 46:如何做好组件的单元测试
Posted 凯小默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 开发实战实战篇 # 46:如何做好组件的单元测试相关的知识,希望对你有一定的参考价值。
说明
【Vue 开发实战】学习笔记。
配置 jest.config.js 文件
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
,可以快添加代码
修改一下 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
测试结果
测试结果如下:
以上是关于Vue 开发实战实战篇 # 46:如何做好组件的单元测试的主要内容,如果未能解决你的问题,请参考以下文章
Vue 开发实战实战篇 # 34:如何在组件中使用EChartsAntv等其他第三方库
Vue 开发实战实战篇 # 45:如何构建可交互的组件文档让代码高亮的显示在页面