网站封装单个exe_如何测试React网站和应用程序

news/2024/5/20 4:35:39/文章来源:https://blog.csdn.net/weixin_39959369/article/details/110857604

通过学习测试React网站和应用程序来获取可用于生产的代码。

#react#

如何测试React网站和应用程序

0aa31b4faa73c03aba58a2aac7cfd676.png

(图片来源:未来)

如果您想知道如何测试React,那么您来对地方了。您真的知道您的代码可以执行它的工作吗?您是否在浏览器中测试过?如果您还没有,或者您无法测试所有内容,并且会中断生产该怎么办?

测试库是开发人员用来在应用程序组件上编写单个测试的一组实用程序。测试的一些主要部分是:

  • 描述:描述测试的内容
  • 使用/渲染:在可以测试组件的环境中使用组件
  • 模拟:创建伪装函数,以便您可以检查自己的假设

在本文的整个过程中,我将探索React Testing库中的一些示例,以帮助您开始使用这种有价值的方法来提高代码输出的健壮性,并确保代码不会抛出错误。一旦投入生产,就会产生令人讨厌的惊喜。

01.开始使用React测试库

我将在此演示中使用create-react-app,因为它已经预先配置了测试库。如果您使用的是Gatsby或自定义设置,则可能需要先进行一些配置,然后才能开始使用测试库。

首先,让我们创建一个新的应用程序。如果您已经拥有最新版本的Node.js,则可以运行以下命令而无需全局安装其他任何东西:

npx create-react-app netmag-javascript-testing

02.确定要测试的内容

假设我们有一个简单的组件,比如说具有某种状态的按钮。在这样的组件中需要测试哪些内容?

组件的外观:

编写组件后,我们不希望任何意外更改。因此,我们将编写一个快照测试以捕获其渲染方式。然后,如果有任何更改,我们将无需手动或视觉测试即可快速看到它。这对于包含许多较小组件的组件非常有用:您可以快速看到外观的何时何地受到影响。

呈现的不同分支:

因为我们可能有两个或更多个不同的输出,所以我们需要测试它是否正确渲染了所有输出,而不仅仅是其中之一。因此,我们需要模拟一个click事件,并在运行此代码分支之后对其呈现方式进行另一个快照测试。

该函数将按预期方式调用:

我们要确保编写的用来调用另一个函数的代码能够正常工作。但是由于该函数是外部依赖项,因此我们不想在这里进行测试。我们的测试应该只封装我们想要的功能。

03.编写您的第一个测试

让我们写我们的第一个测试。在与组件相同的文件夹中创建一个名为MyComponent.unit.test.js的新文件。通过在最后添加test.js,测试库将自动选择它。该文件的内容如下:

import React from ‘react’import { render } from ‘@testing-library/react’import MyComponent from ‘./MyComponent’describe(‘the ’, () => {    // tests go here})

我要引起您注意的第一件事是describe()函数,该函数带有两个参数:第一个是可以用来更好地描述测试字符串的字符串(作为文本字符串)。在我们的案例中,我们只是说应该渲染。当其他人查看您的代码或您必须记住以后的操作时,这非常有用。编写良好的describe语句是代码文档的一种形式,也是编写测试的另一个很好的理由。

第二个参数是您的测试。该描述()函数将运行所有这些测试一个接一个的。

04.使用清理功能

让我们介绍一个名为beforeEach()的辅助函数。我们需要使用它,因为每次我们对组件进行操作时,我们都希望获得一个新副本,而没有以前传递给它的道具仍然存在于组件中。或者,我们可能需要重新渲染该组件:beforeEach()为我们完成了此任务,我们可以将其传递给清理函数。

import { render, cleanup } from ‘@testing-library/react’...describe(‘the component should render’, () => {  beforeEach(cleanup)}

05.编写快照测试

在这一步中,我们将“挂载”我们的组件(或渲染它)。

describe(‘the component should render’, () => {  beforeEach(cleanup)  it(‘renders with basic props’, () => {    render()  })}

此渲染使我们可以访问已编译组件的所有渲染属性。最好将其放入console.log(),这样您可以更清楚地看到它的作用。如果这样做,您会发现这里有一些有用的属性可以利用。我将进行断言(进行可测试的声明)并通过提取容器进行测试。容器“包含”与组件关联的DOM节点(所有HTML)。

it(‘renders with basic props’, () => {    const { container } = render()})

现在我们可以访问容器了,如何确定它是根据我的断言渲染的?通过添加快照测试。

将快照想像成照片。它在特定时间点为我们的组件拍摄快照。然后,每当对代码进行更改时,我们都可以查看它是否仍与原始快照匹配。如果是这样,我们可以确信组件中没有任何变化。但是,如果不是这样,我们可能已经发现了一个问题,该问题源于另一个组件,而以前我们可能没有发现过:

06.测试性质

组件的属性或属性也可以使用快照进行测试。测试您提供给组件的各种道具将为您提供更大的覆盖范围和信心。您永远不知道什么时候需求将意味着您组件的props被重构并且最终输出将改变。

将以下对象添加到文件的顶部:

const lightProperties = {    backgroundColour: ‘white’,    textColour: ‘darkblue’}

我们在对象中定义属性,然后使用散布运算符(三个点后跟对象名称:... lightproperties),因为在渲染这种方式时只能传递一个参数。查看隔离传递的属性也很有用:

it(‘renders with basic props’, () => {        const { container } = render(      )     expect(container).toMatchSnapshot()    })    it(‘renders with the light version props’, () => {        const { container } = render(                    )        expect(container).toMatchSnapshot()    })

07.测试用户界面中的更改

想象一下,我们的组件有一个按钮,并且您想确保单击按钮时发生某些事情。您可能会认为您想测试应用程序的状态。例如,您可能很想测试状态是否已更新。但是,这不是这些测试的目的。

这向我们介绍了使用测试库的重要概念:这里我们不是要测试状态或组件的工作方式。我们在这里测试人们如何使用该组件以及该组件是否符合他们的期望。

因此,状态是否已更新无关紧要;我们要测试的是该按钮按下的结果。

假设我们正在测试将UI从暗模式更改为亮模式的函数的结果。这是组件:

const modeToggle = () => {    const [mode, setMode] = useState[‘light’]   const toggleTheme = () => {     if (theme === ‘light’) {       setTheme(‘dark’)     } else {       setTheme(‘light’)     }   }    return (                  Toggle mode            )}

首先,我们应该在按钮上添加一个测试ID,以便我们可以在渲染阶段找到它:

return (          Toggle mode    

您是否注意到我们向按钮添加了新属性data-testid?这是您可能会测试的方法。首先,从测试库导入一个新函数fireEvent:

import { cleanup,           fireEvent,           render } from ‘@testing-library/react’

我们可以使用该功能来测试UI中是否有更改,并且这些更改是否一致:

it(‘renders with basic props’, () => {    const { container } = render(  ) expect(container).toMatchSnapshot()})it(‘renders the light UI on click’, () => {    const { container, getByTestId } = render()    fireEvent.click(getByTestId(‘mode-toggle’))    expect(container).toMatchSnapshot()})

太好了:我们不必手动访问该站点并四处查看,然后单击按钮并再次浏览-在此期间,您可能会承认,您可能会忘记或错过某些东西!现在我们可以放心,在给定相同输入的情况下,我们可以期望组件中具有相同的输出。

当涉及到测试ID时,我个人不喜欢使用data-testid在DOM中查找内容。毕竟,测试的目的是模仿用户在做什么,并测试他们在做什么。数据-testid似乎有点作弊-尽管数据-testid对您的质量检查工程师可能会派上用场(请参阅“质量保证工程师的角色”装箱)。

相反,我们可以使用getByText()并传入按钮的文本。该方法将更多地针对行为。

08.模拟和监视功能

有时我们可能需要测试对某个函数的调用,但是该函数不在测试范围之内。例如,我有一个单独的模块,其中包含一个函数,该函数将pi的值计算为一定的小数位数。

我不需要测试该模块的结果是什么。我需要测试我的功能是否按预期进行。有关原因的更多信息,请参见“单元和集成测试”框。在这种情况下,我们可以“模拟”该功能:

const getPiValue = jest.fn()it(‘calls the function on click’, () => {    const { container, getByTestId } = render()    fireEvent.click(getByTestId(‘mode-toggle’))    expect(getPiValue).toHaveBeenCalledTimes(1)  )})

该功能toHaveBeenCalledTimes()是在测试库中的许多辅助功能,使我们一个

测试功能的输出。这不仅使我们可以将测试的范围仅扩展到要测试的模块,还意味着我们可以“窥探”或查看函数调用该函数时的功能。

09.开始测试React应用程序

开始编写测试似乎有些艰巨。我希望本教程使您更有信心尝试它。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python建站与java建站有何不同_模板建站好不好?和定制建站有何不同?

很多新手在建站前,都拿不准到底是使用模板建站好,还是找外包团队定制开发好。这两种建站方法差异还是蛮大的,下面就给大家说说模板和定制的几个主要不同之处,你可以根据这些来判断适合自己的建站方式:1.制作周期不同定…

html5网站访问地图

这个地图是我结合了网上的代码自己修改了下做出来的&#xff0c;样子大概是这样 前端使用的是layui&#xff0c;如果要使用的话需要更改一下 我就直接上代码吧 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head><meta char…

wordpressQQ登陆php代码_实现 WordPress 登录查看网站

下面由WordPress教程栏目给大家介绍WordPress 登录查看网站的方法&#xff0c;希望对需要的朋友有所帮助&#xff01;如网站内容只希望注册用户浏览&#xff0c;对其他所有人隐藏&#xff0c;浏览者未登录访问直接跳转到登录注册页面&#xff0c;可以用下面的代码实现。将下面代…

十个网页html,10 个不错的 HTML5 类型网站

Agent 008 Ball 一款采用canvas和audio元素的在线桌球游戏网站The Wilderness Down Town是一个很酷的结合地图和音乐创造出来的互动式电影短片网站。这个由Chris Milk拍摄的基于html5的互动电影短片“We Used to Wait”&#xff0c;超越flash/java,非常强大。网站利用谷歌浏览器…

网站根目录打不开服务器拒绝,检查网站打不开的三种原因

自己做了网站之后&#xff0c;如果在实际访问中&#xff0c;出现了网站打不开的情况&#xff0c;怎么去查找什么原因导致了网站打不开呢&#xff1f;可以通过下面三个方面去检查一下到底自己做网站时哪里出现了问题。一、检查网站域名是否出问题。网站在线方式有二种&#xff1…

java heritrix_「heritrix」开源爬虫: Heritrix 3.1 Windows 上安装/使用 - seo实验室

heritrix目前 Heritrix 的最新版本是 3.1.0(2011-10-21 发布)http://blog.sina.com.cn/s/blog_5f54f0be0101hcy8.html讲了 1.14.4 版本的安装和使用http://blog.sina.com.cn/s/blog_5f54f0be0101hcyd.html讲了如何扩展 1.14.4 版本其中的模块本文讲如何安装和使用 Heritrix 最新…

75款响应式国外漂亮网站建设中模板(上线倒计时模板)

一些关于国外漂亮网站建设中模板&#xff0c;希望大家能使用得上&#xff0c;大家喜欢就点个赞吧。 1、 【网站开通中】黑夜飘雪背景响应式网页倒计时模板 大小&#xff1a;2.09 MB 下载地址&#xff1a;http://www.177347.com/view-105-31847-0.html 2、 【网站计划实现中…

asp php都支持的主机,Asp虚拟主机与php主机有什么区别?Asp虚拟主机适合哪些网站?...

购买过虚拟主机的朋友应该都知道&#xff0c;在我们选择主机方案时&#xff0c;一般主机商都会问我们选择PHP语言&#xff0c;还是ASP语言。那么&#xff0c;这两者之间到底有啥区别呢&#xff1f;Asp虚拟主机与php主机的区别其实&#xff0c;PHP和ASP是两种动态语言&#xff0…

c语言课设代写一般多少钱_SEO代写1000字文章要多少钱?什么价格才算合理?

如题&#xff0c;不单单是SEO代写文章这一块价钱千差万别&#xff0c;其他产品亦是如此。SEO代写报价影响因素很多&#xff0c;以价格区间去衡量合不合理&#xff0c;其实是不公平的。偏锋文章代写报价因为文章发布地址、用途、目的等各种要求的不同&#xff0c;价格也不同。下…

利用其他网站的搜索结果_网站SEO优化知识分享 - 最蜘蛛池出租

原出处&#xff1a;最蜘蛛池原文链接&#xff1a;网站SEO优化知识分享 - 最蜘蛛池1、内容相关性搜索引擎会努力为搜索者的问题提供最相关的结果。具体如何提供搜索结果&#xff0c;不同的搜索引擎有自己不同的内部算法&#xff0c;难以真正确定&#xff0c;但有几项因素肯定会影…

可以发外链的网站_守护袁昆:网站营销运营到底哪里可以发外链?

(文/守护袁昆)对于网站运营者来说网络营销推广比较难做&#xff0c;大多数朋友选择做网站SEO优化&#xff0c;然而SEO优化中外链怎么发的问题却难倒了9成9的从业者。SEO优化到底哪里可以发外链&#xff1f;极少数部分网站是可以发布外链的&#xff0c;但基本上网站收录慢、流量…

linux i2c 传输详解,I2C基础知识_Linux编程_Linux公社-Linux系统门户网站

常识两条总线线路:串行数据总线SDA&#xff0c;串行时钟总线SCL每个连接到总线的器件都有唯一的地址供其他设备寻址每个连接到总线的器件都可以作为发送器和接收器是多主机总线&#xff0c;如果两个或更多主机同时初始化&#xff0c;数据传输可以通过重提检测和仲裁防止数据被破…

服务器上iis7.0的网站架设,如何在iis 7.0配置网站 iis上搭建网站具体图文教程

一个网站需要程序&#xff0c;域名&#xff0c;空间。这本是三个独立产品&#xff0c;如何把他们关联起来&#xff0c;形成我们可以正常访问网站呢&#xff1f;下面就来讲讲如何在iis上&#xff0c;搭建网站。以下实例是在window 2008 server上安装iis 7.0&#xff0c;搭建.net…

php代码统计,php+memcache实现的网站在线人数统计代码

这篇文章主要介绍了phpmemcache实现的网站在线人数统计代码,代码例子简洁实用,需要的朋友可以参考下今天闲来无事&#xff0c;想在博客统计中显示在线人数。在网上找了好多例子&#xff0c;不是数据库存储数据就是文件存储&#xff0c;代码也看起来过于复杂。晚上回来后&#x…

linux下运行hadoop,安装并运行Hadoop - 如何在Linux上安装与配置Hadoop?_服务器应用_Linux公社-Linux系统门户网站...

三、安装并运行Hadoop介绍Hadoop的安装之前&#xff0c;先介绍一下Hadoop对各个节点的角色定义。Hadoop分别从三个角度将主机划分为两种角色。第一&#xff0c;划分为master和slave&#xff0c;即主人与奴隶;第二&#xff0c;从HDFS的角度&#xff0c;将主机划分为NameNode和Da…

聊聊自学,让你事半功倍的学习网站和工具

上学那会儿&#xff0c;我们有大量的业余时间&#xff0c;去做自己想做的事情&#xff0c;幸福且充实。 上大学后&#xff0c;有个明显的感受是&#xff1a;很多知识都要靠自学&#xff0c;才能掌握。 我大学本身自动化专业&#xff0c;学得了强电玩得了弱点&#xff0c;做得…

BAT等大型互联网公司的网站架构演化历程

大型网站系统的特点 高并发&#xff0c;大流量 需要面对高并发用户&#xff0c;大流量访问。Google 日均 PV 35 亿&#xff0c;日 IP 访问数 3 亿&#xff1b;腾讯 QQ 的最大在线用户数 1.4 亿&#xff08;2011年数据&#xff09;。 高可用 系统 7 x 24 小时不间断服务。 海量数…

一个高逼格开发者必须理解的大型分布式网站的几点概念

本文部分来自网络大牛总结&#xff0c;本人只是技术的搬运工&#xff0c;欢迎转发&#xff0c;如果感觉那里归纳的不足可以在评论区发表自己的看法1. I/O优化增加缓存&#xff0c;减少磁盘的访问次数。优化磁盘的管理系统&#xff0c;设计最优的磁盘方式策略&#xff0c;以及磁…

每分钟访问10万+,11种策略教你保持亿级流量网站稳定性!

稳定性在大型网站运行中至关重要&#xff0c;面对每分钟 10 万次的网络访问&#xff0c;稍有不慎就会引起重大故障。今天这篇文章一起讨论下亿级流量网站在稳定性方面的一些做法&#xff0c;希望对您有帮助。 基础策略 配置化 配置化就是把很多业务流程相关的数据统一放在一个配…

iOS 开发-教大家如何使用github客户端上传自己的代码到github网站

首先&#xff0c;博主使用的是mac版本的 直接去githubDesktop上下载最新版本就好了&#xff0c;下载好&#xff0c;点击安装&#xff0c;会提示你是否添加到Application里面&#xff0c;这个随意啦&#xff0c;就是说添加到finder下的应用中。 打开github客户端&#xff0c…