单元测试(jest):理解、安装、使用

这篇具有很好参考价值的文章主要介绍了单元测试(jest):理解、安装、使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、理解单元测试的重要性

bug发现在开发阶段,成本很低,
如果发现在生产环境,成本很高,
如果是关键时刻,决定人生命运,决定企业发展。

从技术的角度讲,有效的提高代码的健壮性,有效的增加代码的可维护性,对于后期的代码重构是必要条件。

从团队的角度讲,开发人员的代码经过完整的单元测试,可以有效的减少测试成本,维护成本,运维成本,运营成本。

不要存在bug不会被发现的侥幸心理,我的经验,bug不是在开发阶段发现就是在测试阶段发现,不是在测试阶段发现就是在生产环境被用户发现。终究会暴露,越早越好。

写了单元测试,我们可以有信心(有依据)的告诉用户我的程序是多么的健壮。
写了单元测试,我们可以有效的培养自己做人、做事的高度。
写了单元测试,是我们工匠精神的体现。

二、jest与项目环境介绍

2.1、Jest:Facebook 的一套开源的 JavaScript 测试框架, 它自动集成了断言、JSDom、覆盖率报告等开发者所需要的所有测试工具,是一款几乎零配置的测试框架。

2.2、环境:vue3 + ts + vite2 + pinia + jest + pnpm

三、jest单元测试实践

3.1、安装

pnpm add babel-jest@latest jest@latest ts-jest@latest -D 
pnpm add @babel/core @babel/preset-env babel-plugin-transform-es2015-modules-commonjs @vue/test-utils @vue/vue3-jest jest-transform-stub @types/jest -D

jest:提供单元测试能力
ts-jest:Typescript 开发语言的预处理器
@vue/test-utils:对 Vue 组件进行测试(Vue 官方提供)
@vue/vue3-jest:将 Vue SFC(单文件组件)转换为 Jest 可执行的 JavaScript 代码
babel-jest:将非标准 JavaScript 代码(JSX/TSX)转换为 Jest 可执行的 JavaScript 代码
@babel/preset-env:提供测试时最新的 JavaScript 语法的 Babel Preset
@babel/preset-typescript:提供测试时TypeScript 语法的 Babel Preset
@vue/babel-plugin-jsx:提供测试时在 Vue 中使用 JSX/TSX 语法的 Babel Plugin
@vitejs/plugin-vue-jsx:提供开发时在 Vue 中使用 JSX/TSX 语法的 Vite Plugin
jest-transform-stub:将非 JavaScript 文件转换为 Jest 可执行的 JavaScript 代码

jest测试,前端,单元测试,jest jest测试,前端,单元测试,jest

3.2、根目录新建jest.config.js

export default {
    preset: 'ts-jest',
    roots: ['<rootDir>/tests/'],
    clearMocks: true,
    moduleDirectories: ['node_modules', 'src'],
    moduleFileExtensions: ['js', 'ts', 'vue', 'tsx', 'jsx', 'json', 'node'],
    modulePaths: ['<rootDir>/src', '<rootDir>/node_modules'],
    testMatch: [
      '**/tests/**/*.[jt]s?(x)',
      '**/?(*.)+(spec|test).[tj]s?(x)',
      '(/__tests__/.*|(\\.|/)(test|spec))\\.(js|ts)$',
    ],
    testPathIgnorePatterns: [
      '<rootDir>/tests/server/',
      '<rootDir>/tests/__mocks__/',
      '/node_modules/',
    ],
    transform: {
      '^.+\\.ts?$': 'ts-jest',
      '^.+\\.vue$': '@vue/vue3-jest',// 使用 vue-jest 帮助测试 .vue 文件
      '^.+\\.(js|jsx)?$': 'babel-jest',// 遇到 js jsx 等转成 es5
      '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',// 遇到 css 等转为字符串 不作测试
    },
    transformIgnorePatterns: ['<rootDir>/tests/__mocks__/', '/node_modules/'],
    // A map from regular expressions to module names that allow to stub out resources with a single module
    moduleNameMapper: {
      '\\.(vs|fs|vert|frag|glsl|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
        '<rootDir>/tests/__mocks__/fileMock.ts',
      '\\.(sass|s?css|less)$': '<rootDir>/tests/__mocks__/styleMock.ts',
      '\\?worker$': '<rootDir>/tests/__mocks__/workerMock.ts',
      '^/@/(.*)$': '<rootDir>/src/$1',
    },
    testEnvironment: 'jsdom',
    verbose: true,
    collectCoverage: false,
    coverageDirectory: 'coverage',
    collectCoverageFrom: ['src/**/*.{js,ts,vue}'],
    coveragePathIgnorePatterns: ['^.+\\.d\\.ts$'],
  }

3.3、根目录新建babel.config.js

module.exports = {
    presets: [
        [
            "@babel/preset-env",
            {
                targets: {
                    node: "current"
                }
            }
        ]
    ],
    plugins: ["transform-es2015-modules-commonjs"]
  }

3.4、package.json

jest测试,前端,单元测试,jest

 "unit:test": "jest"

3.5、根目录创建tests文件,用来放单元测试文件

jest测试,前端,单元测试,jest

3.6、创建一个utils

src/utils/index.ts

  // 数字千位分隔显示123456 =》123,456
  export const formatNumber=(value: string) =>{
    value += '';
    const list = value.split('.');
    const prefix = list[0].charAt(0) === '-' ? '-' : '';
    let num = prefix ? list[0].slice(1) : list[0];
    let result = '';
  
    if (num.length > 3) {
      result = `,${num.slice(-3)}${result}`;
      num = num.slice(0, num.length - 3);
    }
  
    if (num) {
      result = num + result;
    }
  
    return `${prefix}${result}${list[1] ? `.${list[1]}` : ''}`;
  }

3.7、创建utils的单元测试

tests/units.spec.ts

import {formatNumber} from '../src/utils/index'
test('格式化数字123456显示为123,456', () => {
  expect(formatNumber('123456')).toBe('123,456');
})

3.8、运行pnpm unit:test

pnpm unit:test

jest测试,前端,单元测试,jest

测试通过

四、过程记录

4.1、

jest测试,前端,单元测试,jest

 解:我理解,我项目是vite项目,不是vue-cli项目,不能使用这个命令安装jest

4.2、

jest测试,前端,单元测试,jest

 解:

pnpm add @types/jest

jest测试,前端,单元测试,jest

4.3、

jest测试,前端,单元测试,jest

解:jest升级版本超过27出现的问题

pnpm add jest-environment-jsdom

 javascript - 将 Jest 升级到 v28 - 找不到错误测试环境 jest-environment-jsdom - 堆栈内存溢出

4.4、另外一个项目尝试使用jest遇到问题如下,未解决

处理require is not defined in ES module scope, you can use import instead报错

jest测试,前端,单元测试,jest

pnpm add @babel/plugin-transform-modules-commonjs

package.json增加配置

"babel": {
    "plugins": [
      "@babel/plugin-transform-modules-commonjs"
    ]
  }

尝试了一些方法,没有成功,,后来更改了jest.config.js配置,避免了这个问题 

4.5、

vue-cli项目可以使用如下命令增加jest单元测试能力:

vue add @vue/cli-plugin-unit-jest

未测试 

4.6、

记得之前创建项目的时候可以选择测试工具,这里我们也尝试一些,没有发现,所以我们自己安装jest

pnpm create vite

jest测试,前端,单元测试,jest

亲测,新建项目,没有选择测试工具的选项,,如果后续有发现再补充

五、欢迎交流指正,关注我,一起学习。

参考链接:

标签[ts-jest] 最普遍问题 - 堆栈内存溢出

好文-vue3+vite+jest配置 单元测试总结_火辣辣-的博客-CSDN博客_vite 单元测试

@babel/plugin-transform-modules-commonjs · Babel 中文网

vue3 + vite + typescript + eslint + jest 项目配置实践-技术圈

关于Vue中用jest测试_城北的徐公的博客-CSDN博客_vue-jest

Vue3项目实践jest,学会了升职加薪(上篇)_梅花十三儿的博客-CSDN博客

vite + vue3 + ts + jest 测试 - boyyang - 博客园

Jest入门文档 - 掘金

【前端测试】第0章 - 为什么要做单元测试?_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-780205.html

到了这里,关于单元测试(jest):理解、安装、使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 快速上手 Jest 单元测试框架:使用 Jest Preset 加速配置,灵活应对项目需求

    Jest preset 参数的作用是提供一个预先定义好的配置集合,以便于快速开始使用 Jest 单元测试框架。你可以选择现有的 preset,如 jest-preset-angular 、 create-react-app 或自定义 preset,以根据你的项目需求自动应用一系列配置。 使用示例: 先安装一个现有的 preset,例如 jest-preset-angul

    2024年02月06日
    浏览(36)
  • 使用 Jest 在 Visual Studio Code 中进行更好的单元测试

    目录 前言: 使用 Jest 扩展显著改善测试流程 1.自动启动 Jest 测试 2. 显示单个失败/通过的测试用例 允许调试单元测试 在文件中显示代码覆盖率 结论 前言: Jest是一个流行的JavaScript测试框架,它提供了简洁、灵活和强大的工具来编写和运行单元测试。在Visual Studio Code(VS C

    2024年02月13日
    浏览(54)
  • 在单元测试中使用Jest模拟VS Code extension API

    对VS Code extension进行单元测试时通常会遇到一个问题,代码中所使用的VS Code编辑器的功能都依赖于 vscode 库,但是我们在单元测试中并没有添加对 vscode 库的依赖,所以导致运行单元测试时出错。由于 vscode 库是作为第三方依赖被引入到我们的VS Code extension中的,所以它并不受

    2024年02月14日
    浏览(46)
  • 记录使用vue-test-utils + jest 在uniapp中进行单元测试

    uniapp推荐了测试方案 @dcloudio/uni-automator ,属于自动化测试,api提供的示例偏重于渲染组件,判断当前渲染的组件是否和预期一致 vue推荐的测试方案 vue test utils ,属于单元测试,可以搭配jest、mocha等单测运行器 我选了方案2🕶️ 关于vue的组件测试,vue官方提到: 你的 Vue 应用

    2024年02月06日
    浏览(46)
  • Jest单元测试(一)

    Jest是Facebook一套开源的 JavaScript 测试框架,它自动集成了断言、JSDom、覆盖率报告等测试工具。 他适用但不局限于使用以下技术的项目:Babel, TypeScript, Node, React, Angular, Vue 官网地址:https://jestjs.io/en/ 使用 yarn 安装 Jest︰ 或 npm: 注:Jest的文档统一使用yarn命令,不过使用npm也

    2024年02月16日
    浏览(44)
  • vue jest单元测试

    vue-test-utils 提供了两种方式用于渲染,或者说 加载(mount) 一个组件 — mount 和 shallowMount 。一个组件无论使用这两种方法的哪个都会返回一个 wrapper ,也就是一个包含了 Vue 组件 的对象,辅以一些对测试有用的方法。 mount : 会渲染子组件 shallowMount :会加载子组件,不会被

    2024年02月05日
    浏览(38)
  • vue 引入jest 单元测试

    为什么要搞单元测试,好处有什么。 提测需要, 代码覆盖率达到95%,分支覆盖率达到100% ,不达到要求,不给测。 确保代码正确性。单元测试可以检测和发现代码中的错误,在开发期间及时纠正。 提高代码质量。进行单元测试可以思考更多场景,添加边界测试用例,找到更

    2024年01月18日
    浏览(45)
  • Jest单元测试Vue项目实践

    ​ 做单元测试的优点: 1.减少bug避免低级错误 2.提高代码运行质量 3.快速定位问题 4.减少调试时间,提高开发效率 5.便于重构 Jest安装: 配置 vueCli内置了一套jest配置预置文件,一般情况下直接引用即可,如有特殊配置可见下文配置释意。 配置项目释意 module.exports = { 相关

    2024年02月12日
    浏览(43)
  • vue+jest 单元测试配置+用例

    目录 目录 1 Jest 说明文档 2 1、 搭建node环境包 2 这里安装环境是node 18,npm 9.5.0。 2 Test Runner 2 2、 安装jest 3 Jest安装步骤 4 项目的根目录下创建一个.babelrc 配置文件: 4 在项目的根目录下创建 jest.config.js 4 3、 全局设定 5 预处理和后处理 5 方法 6 4、 断言 6 真假断言 6 数字断言

    2024年02月07日
    浏览(40)
  • jest单元测试支持ts文件方案

    jest配置 jest配置如下: 额外配置说明: 其中transform增加了jest的es6处理能力。默认情况下jest只能处理require文件,当配置tranform后可以对impoet文件进行处理 prese和testEnvironment为jest增加ts处理能力 注意jest文件应当放在需要进行单元测试的目录,jest将按照其配置文件所子目录按照

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包