使用Jest测试框架测试JS项目

news2024/11/16 9:47:38

前言

JavaScript的测试框架有很多,这里主要记录一些自己在初次使用jest时遇到的一些问题。详细使用文档可以参照官方说明文档。

简介

Jest 是一款优雅、简洁的 JavaScript 测试框架。

Jest 支持 Babel、TypeScript、Node、React、Angular、Vue 等诸多框架!

Jest 是由 Facebook 开发的 JavaScript 测试框架。它是测试 React 的首选,并且得到了 React 社区的支持和开发。

  • 中文使用文档:https://jestjs.io/zh-Hans/docs/getting-started
  • 官方网址:https://jestjs.io/
  • Github:https://github.com/facebook/jest

使用

安装

npm install -D jest

jest支持多种配置方式,这里采用了jest.config.cjs的配置,详见Jest 配置。

const config = {
  // 是否应在运行期间报告每个单独的测试。执行后所有错误仍将显示在底部
  verbose: true,
  // 模块使用的文件扩展名
  moduleFileExtensions: [
    'js',
    'json'
  ],
  // 测试用例目录
  testMatch: [
    '**/tests/**/*.js'
  ],
  // 是否收集测试时的覆盖率信息
  collectCoverage: true,
  // 测试覆盖度输出路径
  coverageDirectory: './.coverage',
  // 测试覆盖的文件
  collectCoverageFrom: [
    'src/**/*.{js,jsx}',
    '!**/node_modules/**'
  ],
  // 测试运行的环境
  testEnvironment: 'node',
};

module.exports = config;

package.json中可配置

{
  "scripts": {
    "lint": "eslint .",
    "lint:fix": "eslint . --fix",
    "build": "webpack --config webpack.config.js",
    "test": "jest"
  }
}

虽然安装的是jest,一般实际使用的是@jest/globals,jest包依赖了它。

若是要固定版本,也可以执行npm install -D @jest/globals

代码中使用示例:

/**
 * @jest-environment jsdom
 */
import { test, expect, describe, afterEach } from '@jest/globals';
import path from 'path';

describe('test load script in html', () => {
  afterEach(() => {
    delete window.Enum;
  });
  test('test using Enum in html script tags', function () {
    expect(window.Enum).toBeUndefined();
    const tag = document.createElement('script');
    tag.type = 'text/javascript';
    tag.src = path.resolve(__dirname, 'test.html');
    tag.onload = () => {
      expect(window.Enum).toBeDefined();
    };
    document.body.appendChild(tag);
  });
});

特别注意: 代码片段中使用的testEnvironment是jsdom

虽然配置文件中指定了运行环境 ,但是若是在特殊情况下使用,可以在文件头部申明文件自身运行的测试环境。

jsdom用于模拟在浏览器中的使用,此时需要安装依赖npm install -D jest-environment-jsdom

执行测试

npm run test

输出结果
在这里插入图片描述

遇到的问题

问题1:SyntaxError: Unexpected token ‘.’

> jest

./node_modules/jest/node_modules/jest-cli/build/run.js:135
    if (error?.stack) {
              ^
SyntaxError: Unexpected token '.'

?.运行符,nodejs在14+版本中才支持,

本地node版本太低,使用nvm use 14切换版本即可。

问题2:Missing class properties transform

> jest

 FAIL  tests/test_enum.js
  ● Test suite failed to run

    Jest encountered an unexpected token

    Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.

    ...

    Details:

    SyntaxError: ./src/index.js: Missing class properties transform.
       8 |
       9 | export default class Enum {
    > 10 |   #items = [];
         |   ^^^^^^^^^^^^
      11 |   #config = {};
      12 |   /**
      13 |    *

因为使用了babel来编译js,对以私有属性的支持需要:

 npm install -D @babel/plugin-proposal-class-properties

并在.babelrc配置中添加plugin相关

{
  "presets": [
    "@babel/preset-env"
  ],
  "plugins": [
    "@babel/plugin-proposal-class-properties"
  ]
}

参考文档

  1. Jest 配置项
  2. Jest中文说明文档–断言
  3. MDN - 可选链运算符?.
  4. error-while-jest-setup-for-snapshots-in-if-error-stack
  5. error-missing-class-properties-transform

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1616378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试之【合理的利用GPT来辅助软件测试一】

读者大大们好呀!!!☀️☀️☀️ 🔥 欢迎来到我的博客 👀期待大大的关注哦❗️❗️❗️ 🚀欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言GPT的原理及技巧GPT辅助接口自动化测试 前言 在编程基础栏目中&#xff…

循环神经网络实例——序列预测

我们生活的世界充满了形形色色的序列数据,只要是有顺序的数据统统都可以看作是序列数据,比如文字是字符的序列,音乐是音符组成的序列,股价数据也是序列,连DNA序列也属于序列数据。循环神经网络RNN天生就具有处理序列数…

嵌入式linux学习之arm开发板移植ssh

1.下载源码 (1)zlib 下载网址:http://www.zlib.net/fossils/ 教程中版本选择的是: zlib-1.2.11.tar.gz (2)openssl下载网址:https://www.openssl.org/source/mirror.html 教程中版本选择的是: openssl-1.1…

用友U8-Cloud api/hr接口存在SQL注入漏洞

声明: 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 简介 U8 Cloud是由用友推出的新一代云ERP系统&#xff0…

VSCode的C/C++开发 ===> Windows

一、开发环境搭建 安装mingw-w64编译器(GCC for Windows 64 & 32 bits)、Cmake工具(选装) VSCode插件安装 C/C cmake cmake tools 二、代码实践演练 基于g命令 g编译单文件,生成带调试信息的可执行文件、并调试 g -g main.cpp -o my_single_swap g编译多文件…

【C#】rdlc报表答应报错:未能加载文件或程序集“Microsoft.SqlServer.Types

文章目录 一、报错信息二、解决方式 一、报错信息 Microsoft.Reporting.WinForms.LocalProcessingException: An error occurred during local report processing. —> Microsoft.Reporting.DefinitionInvalidException: The definition of the report ‘’ is invalid. —&…

算法练习|Leetcode49字母异位词分词 ,Leetcode128最长连续序列,Leetcode3无重复字符的最长子串,sql总结

目录 一、Leetcode49字母异位词分词题目描述解题思路方法:哈希总结 二、Leetcode128最长连续序列题目描述解题思路方法:总结 三、Leetcode3无重复字符的最长子串题目描述解题思路方法:双指针法总结sql总结 一、Leetcode49字母异位词分词 题目描述 给你一个字符串数组&#xf…

数据结构与算法解题-20240422

这里写目录标题 一、2. 两数相加二、67. 二进制求和三、415. 字符串相加四、LCS 01. 下载插件五、71. 简化路径 一、2. 两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 …

分享三个转换速度快、准确率高的视频转文字工具

想要直接将视频转换成文字,转换工具很重要!给大家分享三个转换速度快、准确率高的视频转文字工具,轻松完成转换。 1.网易见外 https://sight.youdao.com/ 网易家的智能转写翻译服务工作站,网页端就可以直接使用,支持视…

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式,分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是: 一般指令模式(command mode)以 vi 打开一个文件就直接进入一般指令模式了(这是默认的…

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告:“学习排名 (Learning To Rank)” 功能处于技术预览版,可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题,但此功能不受官方 GA 功能的支持 SLA 的约束。 注意:此功能是在版本 8.12.0 中引入的,并且仅适…

GEE:基于光谱距离度量方法的巴以冲突造成的地表覆盖变化检测

作者:CSDN @ _养乐多_ 本文将介绍如何在 Google Earth Engine (GEE) 平台中使用光谱距离度量方法进行地表覆盖变化检测,并以加沙地区为例,使用Sentinel2数据展示2023年3月和2024年3月的地表覆盖变化区域。 结果如下图所示, 文章目录 一、核心函数1.1 spectralDistance函数…

分布式与一致性协议之拜占庭将军问题(一)

拜占庭将军问题 概述 拜占庭将军问题其实是借拜占庭将军故事展现了分布式共识问题,探讨和论证了解决的办法。实际上,拜占庭将军问题是分布式领域最复杂的一个容错模型,一旦搞懂了它,久能掌握分布式共识问题的解决思路&#xff0…

Java HotSpot(TM) 64-Bit Server VM warning_ Sharing is only supported for boot loader classes because

今天在学习freemarker静态化页面的时候遇到了这个错误: Java HotSpot™ 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 最终我找到了解决办法 解决办法原帖:https://s…

Java中的super

package day33; ​ public class Person {public String name;public int age; ​public Person() {System.out.println("调用了父类的无参构造");} } ​ package day33; ​ public class teacher extends Person{public teacher() {System.out.println("调用了…

C语言--基础面试真题

1、局部变量和静态变量的区别 普通局部变量和静态局部变量区别 存储位置: 普通局部变量存储在栈上 静态局部变量存储在静态存储区 生命周期: 当函数执行完毕时,普通局部变量会被销毁 静态局部变量的生命周期则是整个程序运行期间&#…

【R语言简介】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

微软刚开源就删库的WizardLM-2:MT-Bench 榜单评测超越GPT-4,7B追平Qwen1.5-32B

前言 微软最近发布的WizardLM-2大型语言模型因其先进的技术规格和短暂的开源后突然撤回,引起了科技界的广泛关注。WizardLM-2包括三个不同规模的模型,分别是8x22B、70B和7B,均展现了在多语言处理、复杂对话、推理和代理任务上的卓越能力。 H…

Ardupilot OpenIPC 基于WFB-NG构架分析和数据链路思考

Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考 1. 源由2. OpenIPC安装2.1 安装2.2 配置2.2.1 天空端配置文件2.2.2 地面端配置文件 2.3 当前配置选择 3. WFB-NG安装3.1 RTL8812AU安装3.1.1 驱动安装3.1.2 定位设备 3.2 wfb-ng安装3.2.1 传输层安装3.2.2 配置…

《架构风清扬-Java面试系列第23讲》如何理解Java的泛型檫除?

晚上好,给大家加个餐 来,思考片刻,说出你的答案 1,什么是泛型檫除? 泛型擦除是指编译器在处理泛型代码时,会在编译阶段移除(擦除)所有与泛型相关的类型参数信息,将其替换…