bun DOM测试

2024-03-06 07:44
文章标签 测试 dom bun

本文主要是介绍bun DOM测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Bun的测试运行器与现有的组件和DOM测试库(包括React Testing Library 和 happy-dom)配合得很好。

happy-dom

为了编写你的前端代码和组件的无头测试,我们推荐 happy-dom。Happy DOM 使用纯 JavaScript 实现了一套完整的 HTML 和 DOM API,使得能够高保真地模拟浏览器环境。

要开始使用,请将 @happy-dom/global-registrator 包作为开发依赖项进行安装。

bun add -d @happy-dom/global-registrator

我们会在运行测试之前使用 Bun 的预加载功能来注册 happy-dom 全局变量。这一步骤将使浏览器API(如document)在全局范围内可用。在项目的根目录中创建一个名为 happydom.ts 的文件,并添加以下代码:

import { GlobalRegistrator } from "@happy-dom/global-registrator";GlobalRegistrator.register();

要在 bun 测试之前预加载此文件,请打开或创建一个 bunfig.toml 文件并添加以下行。

[test]
preload = "./happydom.ts"

当你运行 bun test 时,这将会执行 happydom.ts。现在你可以编写使用浏览器 API(如 document 和 window)的测试了。

import {test, expect} from 'bun:test';test('dom test', () => {document.body.innerHTML = `<button>My button</button>`;const button = document.querySelector('button');expect(button?.innerText).toEqual('My button');
});

根据你 tsconfig.json 的设置,你可能会在上面的代码中看到一个 “Cannot find name 'document'” 的类型错误。为了 “注入” document和其他浏览器API的类型,可以在任何测试文件的顶部添加以下三斜杠指令。

/// <reference lib="dom" />import {test, expect} from 'bun:test';test('dom test', () => {document.body.innerHTML = `<button>My button</button>`;const button = document.querySelector('button');expect(button?.innerText).toEqual('My button');
});

用 bun test 运行测试:

bun test
bun test v1.xdom.test.ts:
✓ dom test [0.82ms]1 pass0 fail1 expect() calls
Ran 1 tests across 1 files. 1 total [125.00ms]

@testing-library/react

要在 Bun 中使用 @testing-library/react,首先确保已安装 @happy-dom/global-registrator 作为开发依赖,以便能够为 Bun 的测试运行器模拟高保真的浏览器环境。以下是设置和使用 @testing-library/react 的步骤:

1、安装 @happy-dom/global-registrator

bun add -d @happy-dom/global-registrator
2、创建一个名为 happydom.ts 的文件,并添加以下代码:
import { GlobalRegistrator } from "@happy-dom/global-registrator";
GlobalRegistrator.register();
3、在 bunfig.toml 中添加预加载配置以在测试前加载 happy-dom:
[test]
preload = "./happydom.ts"

4、在测试文件中,编写使用 @testing-library/react 的测试,例如:

// Modal.jsximport React from 'react';const Confirmation = () => {return <section role="dialog"></section>;
};export default Confirmation;
// modal.test.jsximport React from 'react';
import Confirmation from './component/Modal';
import { render } from '@testing-library/react';test("Confirmation component has a section with the role of dialog", () => {const { getByRole } = render(<Confirmation />);const dialogSection = getByRole("dialog");expect(dialogSection).not.toBe(null);
});

 enzyme

Enzyme 来自 airbnb 公司,是一个用于 React 的 JavaScript 测试工具,方便你判断、操纵和历遍 React Components 输出。

Enzyme 的 API 通过模仿 jQuery 的 API ,使得 DOM 操作和历遍很灵活、直观。Enzyme 兼容所有的主要测试运行器和判断库,文档和例子使用 mocha 和 chai。

1、安装

pnpm add -D enzyme @cfaester/enzyme-adapter-react-18

2、配置 enzyme 需要的适配器。

import Enzyme from 'enzyme';
import Adapter from '@cfaester/enzyme-adapter-react-18';Enzyme.configure({ adapter: new Adapter() });

3、测试代码实现

import React from 'react';
import { shallow } from 'enzyme';
import Confirmation from './component/Modal';import Enzyme from 'enzyme';
import Adapter from '@cfaester/enzyme-adapter-react-18';Enzyme.configure({ adapter: new Adapter() });describe('Confirmation', () => {test('renders a section element with role "dialog"', () => {const wrapper = shallow(<Confirmation />);expect(wrapper.find('section')).toHaveLength(1);expect(wrapper.find('section').prop('role')).toBe('dialog');});
});

这篇关于bun DOM测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779317

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

BIRT 报表的自动化测试

来源:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-birttest/如何为 BIRT 报表编写自动化测试用例 BIRT 是一项很受欢迎的报表制作工具,但目前对其的测试还是以人工测试为主。本文介绍了如何对 BIRT 报表进行自动化测试,以及在实际项目中的一些测试实践,从而提高了测试的效率和准确性 -------

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

17 通过ref代替DOM用来获取元素和组件的引用

重点 ref :官网给出的解释是: ref: 用于注册对元素或子组件的引用。引用将在父组件的$refs 对象下注册。如果在普通DOM元素上使用,则引用将是该元素;如果在子组件上使用,则引用将是组件实例: <!-- vm.$refs.p will be the DOM node --><p ref="p">hello</p><!-- vm.$refs.child will be the c

react笔记 8-19 事件对象、获取dom元素、双向绑定

1、事件对象event 通过事件的event对象获取它的dom元素 run=(event)=>{event.target.style="background:yellowgreen" //event的父级为他本身event.target.getAttribute("aid") //这样便获取到了它的自定义属性aid}render() {return (<div><h2>{

day45-测试平台搭建之前端vue学习-基础4

目录 一、生命周期         1.1.概念         1.2.常用的生命周期钩子         1.3.关于销毁Vue实例         1.4.原理​编辑         1.5.代码 二、非单文件组件         2.1.组件         2.2.使用组件的三大步骤         2.3.注意点         2.4.关于VueComponen