高考考试网
当前位置: 首页 高考资讯

insomnia 加快版(用Insomnia来提升依赖性ーー充满信心)

时间:2023-08-12 作者: 小编 阅读量: 3 栏目名: 高考资讯

用Insomnia来提升依赖性ーー充满信心当您有一个好的测试套件在您的代码库上运行时,您可以自信地升级您的依赖项每天‬分享‬最新‬软件‬开发‬,Devops,敏捷‬,测试‬以及‬项目‬管理‬最新‬,最热门‬的‬文章‬,每天‬花‬3分钟‬学习‬。

当您有一个好的测试套件在您的代码库上运行时,您可以自信地升级您的依赖项

每天‬分享‬最新‬软件‬开发‬,Devops,敏捷‬,测试‬以及‬项目‬管理‬最新‬,最热门‬的‬文章‬,每天‬花‬3分钟‬学习‬何乐而不为‬,希望‬大家‬点赞‬,加‬关注‬,你的‬支持‬是我‬最大‬的‬动力‬。

始终保持您的依赖关系是最新的。如果不升级,就会错过 bug 修复、安全补丁和新特性。如果您使用的软件包的版本很快将不再受支持,那么您甚至可能面临“生命终结”的最后期限。

如果升级依赖关系如此重要,为什么很多开发人员不这样做呢?他们可能不知道怎么做,或者他们可能不理解升级的好处,或者他们可能觉得没有时间。或者,他们可能会害怕。

为什么开发人员害怕升级他们的依赖关系?因为他们觉得可能会弄坏什么东西。他们为什么害怕打碎什么东西?因为他们没有合适的测试。

当您有一个好的测试套件在您的代码库上运行时,您可以自信地升级您的依赖项。

在本文中,我们将讨论语义版本控制、升级依赖关系时的陷阱,以及如何有把握地升级依赖关系。我们还将使用一个小应用程序来演示一个好的测试套件如何帮助您在部署应用程序之前捕捉依赖性升级带来的重大变化。

语义版本控制

让我们简要讨论一下语义版本控制以及它是如何工作的。JavaScript 包通常遵循语义版本控制,语义版本控制由三个数字组成,分别表示包的主版本、次版本和补丁版本。因此,如果一个包被设置为版本2.4.1,那么它就是主版本2、次版本4和补丁版本1。

补丁版本通常包括 bug 修复和安全补丁。次要版本可以包括新特性。但是补丁版本和次要版本都不应该破坏或更改包的现有 API。主要版本可能伴随着重大更改,通常是通过删除一个 API 方法或重大修改代码的底层架构来实现的。

升级依赖项时的陷阱

如果软件包开发人员正确地遵循语义版本控制,那么这些软件包的消费者通常可以安全地升级应用程序中的次要版本和补丁版本,因为根据定义,在这些版本中不允许进行破坏性的更改。然而,一些包维护人员可能没有很好地遵循这个标准,或者可能在没有意识到的情况下意外地发布了破坏性的更改,所以您永远不能确定。但一般来说,升级补丁和依赖项的次要版本应该进行得很顺利。

这是你需要更加小心的主要版本。当将软件包从一个主要版本升级到下一个主要版本时,查看更改日志或发布说明以查看更改内容总是一个好主意。

有时候,主要版本中的重大更改不会影响到您,比如您没有使用现在已经删除的 API 方法。其他时候,更改将是相关的,您将需要遵循迁移指南,以查看为了正确使用新的主要版本需要进行哪些更改。对于大规模的重大变更,有时开发人员会非常友好地为您提供一个代码,一个执行大部分或全部变更的脚本。

好消息是,升级依赖项,甚至主要版本,不需要是一个可怕的经验。

用信心升级依赖关系

在升级依赖项时,具有高代码覆盖率的测试套件将使您受益匪浅。如果测试很好地覆盖了代码,那么测试应该会让您相信升级后应用程序仍然能够正常工作。如果所有测试都通过了,那么您应该相信升级进行得很顺利。如果有任何测试失败,您就知道应用程序应该关注哪些领域。

如果你的应用程序还没有测试,现在就开始编写吧!一组好的测试可以发挥很大的作用ーー不仅在升级依赖关系时,而且在重构现有代码、编写新特性和修复 bug 时也是如此。

即使有一个好的测试套件,在升级依赖项之后进行少量的手动测试也是一个好主意,作为一种附加的安全措施。毕竟,在您的测试覆盖率中可能存在空白,或者您没有考虑到的边缘情况。

如果您确实在手工测试期间发现了测试套件中的缺陷,那么您应该为您发现的问题编写一个快速测试,然后去修复这个问题。这样,您现在就有了一个自动化测试,以确保您发现的特定 bug 不会在将来再次发生。

演示时间

现在让我们考虑一个小的演示应用程序,它将帮助这些抽象的想法变得更加具体。这里我们有一个非常有用的应用程序,今天是我的生日。这个应用程序是最好的,最简单的,最快的方式来决定今天是否是你的生日。只要输入你的出生日期和今天的日期,应用程序就会告诉你今天是不是你的生日。

演示应用程序: “今天是我的生日”

好吧,我开玩笑的。但是,我们需要一个简单的应用程序演示的目的,所以我们在这里。

这个应用程序是用一个 Node.js 和 Express 后端以及一个简单的 HTML、 CSS 和普通的 JavaScript 前端构建的。我使用 date-fns 包处理日期,并使用 Insomnia 编写 API 测试。我能够使用 Inso CLI 从命令行运行 API 测试,我甚至已经将它们集成到 GitHub Actions 的持续集成管道中。很漂亮,我知道。你可以在 GitHub 上查看这个应用程序的所有代码。

代码中决定今天是否是你生日的相关部分转载如下:

JavaScript

const format = require('date-fns/format');const express = require('express');const Router = express.router();router.get('/', function (req, res) {if (!req.query.birthday) {return res.JSON({ data: 'Please provide your birthdate' });}const todaysDate = new Date(req.query.today) || new Date();

我们编写的三个测试的输出如下:

三项Insomnia测试都通过了

因此,让我们考虑一下在升级我们的应用程序使用的 date-fns 版本时可能要做些什么。首先,我特意使用了 v1.30.1,这样以后我们就可以升级到 v2.28.0。从 v1升级到 v2是一个重要的发行版,有着重大的变化,我们需要确保我们的应用程序在升级之后仍然能够正常工作。如果我们的应用程序在升级后坏了,人们怎么知道今天是他们的生日?

我们首先将 package.json 文件中 date-fns 的版本从 v1.30.1更改为 v2.28.0。然后,我们将运行纱线安装安装的新版本。

之后,我们可以进行测试,看看情况如何:

升级 date-fns 包后有两个测试失败

哦,不,我们有一些失败者!我们的三个测试中有两个失败了,看起来我们的 API 有一个糟糕的 JSON 响应。虽然处理失败的测试并不有趣,但是我们的测试已经证明在将 date-fns 从 v1升级到 v2时能够检测到一个问题。

如果我们进一步研究,就会发现 date-fns 中的以下错误: “ RangeError: 使用‘ DD’代替‘ DD’(in‘ MM-DD’)格式化每月的天数。”

回顾我们的代码,我们确实使用了 MM-DD 作为日期格式。查阅 date-fns 2.0.0版本的更改日志,我们可以看到其中一个突破性的变化是,在同时格式化月份和日期时,大写 DD 的使用已经被小写 DD 所取代。谢谢你的建议,更换日志!

现在我们可以在代码中进行简单的更改,如下所示:

JavaScript

const format = require('date-fns/format');const express = require('express');const router = express.Router();router.get('/', function (req, res) {if (!req.query.birthday) {return res.json({ data: 'Please provide your birthdate' });}const todaysDate = new Date(req.query.today) || new Date();const birthDate = new Date(req.query.birthday);const todaysMonthAndDay = format(todaysDate, 'MM-dd');const birthdayMonthAndDay = format(birthDate, 'MM-dd');const isTodayMyBirthday = todaysMonthAndDay === birthdayMonthAndDay;return res.json({ data: isTodayMyBirthday });});module.exports = router;

然后我们将再次运行测试套件,瞧,所有三个测试都再次通过了。订单已经恢复,我们已经成功地升级了我们应用程序中的一个依赖项

结论

升级依赖关系很重要。不断更新意味着您拥有最新的 bug 修复、安全补丁和特性。通过定期更新您的依赖项(可能是每月一次或每季度一次) ,您可以避免在最后一分钟需要升级报废软件包的恐慌。

请记住,测试可以帮助您自信地升级。那你还在等什么?去写一些测试和升级你的应用程序的依赖现在!

    推荐阅读
  • 带语音拨号的手机有哪些(手机仅13克全功能键盘)

    主要参数手机高度4.7cm、宽2.1cm,厚度为12mm,整机重量在13克左右。配备32MRAM32MROM,可插入NANOSIM卡,200mAh的电池可提供3天的待机时间,连续通话则只有3个小时。事实上Zancotinyt1不仅能够打电话和发短信,甚至还能在打电话时做出变声的效果。蓝牙接听、拨号在连接上其他智能手机的蓝牙后,即可代替智能手机接听和拨打电话。而为了避免这种事情发生,商品本身还附赠一条挂绳。除了方便携带和防止遗失,潮男潮女其实也能够拿来当成配饰使用。

  • 选错伴侣是一生的误区(34欲擒故纵)

    获得性同意的性行为必须是得到对方知情和认同,在对方有清醒意识的前提下自愿参与,并且是可撤销的。被误会的“性同意”确认了情侣关系,一起吃饭玩耍,牵手接吻,不意味着性同意。婚内出现矛盾,女方对男方不满,不代表男方可以随意与女方发生关系,不代表是妻子就是性同意。女生同意男生夜晚约出来喝酒,不代表女生默认性同意。这种情况下,女方做出的性同意不能作为有效的性同意。

  • 古诗词 飞花令(飞花令21首古诗词雨)

    「飞花令」本是中国古代一种喝酒时用来罚酒助兴的酒令,「飞花」一词出自唐代诗人韩翃《寒食》诗中的「春城无处不飞花」。在这个特殊的假期,家长们不如和孩子一起玩玩「飞花令」,不仅能让孩子掌握更多古诗,还能提高思维能力。下面是给大家整理的关于“雨”个字的飞花令,希望您在和孩子玩飞花令的时候可以用到。二就是选一些好点的古诗书籍,家长通过玩飞花令的方式让孩子背诵上面的诗词。

  • 发面劲道方法(怎么和面才有劲道)

    待水被面粉吸干时,用手反复搓拌面,使面粉成许许多多小面片,俗称“雪花面”。而后再朝“雪花面”上洒水,用手搅拌,使之成为一团团的疙瘩状小面团,称“葡萄面”。此时面粉尚未吸足水分,硬度较大,可将面团勒成块,将面盆或面板上粘的面糊用力擦掉,再用手蘸些水洗去手上的面粉洒在“葡萄面”上,即可用双手将葡萄面揉成光滑的面菌。

  • 咏鹅的意思全解(咏鹅的意思全解曲的意思)

    洁白的羽毛漂浮在碧绿的水面上,红红的脚掌拨动着清清的水波。这首诗开篇先声夺人,“鹅!鹅!鹅!”

  • 火龙果种植间距是多少(火龙果种植间距是多少米)

    种子倒卵形,黑色,种脐小。

  • 二o二0年春节是几月几号(春节在这天你准备好了吗)

    以下内容大家不妨参考一二希望能帮到您!二o二0年春节是几月几号01月25日。春节的时间在公历1月21日至2月21日之间游动。“最早的春节”和“最迟的春节”相差整一个月。根据历法计算,如果农历不进行人为调整的话,2319年2月21日将迎来“史上最晚春节”,此前春节最迟出现在公历2月20日,为1920年和1985年。

  • 家装是什么意思(家装的解释)

    家装,拼音是jiāzhuāng,是家庭住宅装修装饰的简称狭义的家装:指室内装饰,是从美化的角度来考虑的,以使室内的空间更美观;广义的家装:包括室内空间的装修,下面我们就来说一说关于家装是什么意思?我们一起去了解并探讨一下这个问题吧!家装是什么意思家装,拼音是jiāzhuāng,是家庭住宅装修装饰的简称。随着当下人们生活水平的提高,对家装的要求也越来越高。

  • 开封七朝古都指哪几个朝代(开封七朝古都是哪七朝)

    开封七朝古都指哪几个朝代分别是战国时的魏国,五代时期的后梁、后晋、后汉、后周,北宋以及金朝等。战国时,魏惠王将魏国的都城由安邑迁往大梁。迁都大梁之后,魏文侯崇儒重教,招贤纳士,励精图治、率先称雄七国,奠定了魏国百年霸业,使得大梁一跃而成为当时最为繁华的名都大邑之一。其后,五代时期的后梁、后晋、后汉、后周先后定都于开封,全国的政治经济中心东称,开封又成为全国的政治、经济、文化、交通中心。