前言测试您的代码是确保代码安全的第一步。做到这一点的最佳方法之一是使用单元测试,确保应用程序中的每个小功能都按其应有的方式工作——尤其是当应用程序存在边缘情况时,例如无效输入,或具有潜在危险的输入。为什么要进行单元测试谈到单元测试时,有许多不同的方法。单元测试的一些主要目的是:验证功能:单元测试确保代码做正确的事,不做不该做的事——这是大多数错误发生的地方。防止代码混乱:当我们发现一个bug时,添加一个单元测试来检查这个场景,可以保证以后代码更改不会再次引入这个bug。记录代码:通过适当的单元测试,一整套测试和结果提供了应用程序应如何运行的规范。代码更安全:单元测试可以检查可利用的漏洞(例如可以实现恶意SQL注入的漏洞)。使用单元测试框架确定范围使我们能够快速编写和自动化测试,并将它们集成到我们的开发和部署过程中。这些框架通常支持在前端和后端JavaScript代码中进行测试。以下是一些通用指南,可帮助您编写高性能单元测试和可测试代码。保持简短,不要让你的单元测试变得多余。测试应该只有几行代码,检查应用程序的代码块。考虑编写测试以确认功能的正确执行的利弊是有帮助的。但是,编写更广泛的测试套件来检查功能是否在误用或边缘情况下失败会更有效率。这些负面测试甚至更有价值,因为它们有助于预测意外情况。例子包括一个函数应该在什么时候抛出异常,或者它应该如何处理它接收到的格式错误的数据。分解复杂的功能具有很多逻辑的大型功能很难测试;包含太多操作以有效测试每个变量。如果一个功能太复杂,它可以分解成更小的功能并单独测试。避免网络和数据库连接单元测试应该是快速和轻量级的,但是功能会发出网络请求,或者连接到其他程序并需要很长时间才能执行。这使得同时运行许多操作具有挑战性,并可能导致更脆弱的代码。您可以在单元测试中伪造数据以模拟网络或数据库调用,这样您就可以测试函数的其余部分。您可以在单独的测试中包含真实的网络和数据库连接,这称为集成测试。如何编写单元测试现在我们已经回顾了一些单元测试的最佳实践,您已经准备好用JavaScript编写您的第一个单元测试了。本教程使用Mocha框架,这是最流行的单元测试框架之一。每个测试框架都略有不同,但足够相似,学习基本概念将使您可以轻松地在它们之间切换。要按照示例进行操作,请确保您的计算机上安装了Node.js。创建一个新项目首先,打开一个终端窗口或命令提示符到一个新的项目文件夹。然后,通过键入npminit-y在其中创建一个新的Node.js项目。这将在文件夹内创建一个package.json文件,使您能够使用npminstall-Dmocha将Mocha安装为开发依赖项。接下来,在编辑器中打开package.json文件,将占位符测试脚本替换为mocha:"scripts":{"test":"mocha"},实现一个类接下来,编写一个简单的红绿灯系统,实现单元测试.在项目目录中,创建一个traffic.js文件,并在TrafficLight类中添加以下代码:classTrafficLight{constructor(){this.lightIndex=0;}staticgetcolors(){return[“绿色”,“黄色”,“红色”];}getlight(){returnTrafficLight.colors[this.lightIndex];}next(){this.lightIndex++;//这是故意错误的!如果(this.lightIndex>TrafficLight.colors.length){this.lightIndex=0;}}}module.exports=TrafficLight;该类包含四个部分:TrafficLight.colors:交通灯颜色的常量属性。lightIndex:跟踪当前交通灯颜色索引变量。light:类的属性,以字符串形式返回当前交通灯颜色。next():将交通灯更改为下一种颜色的函数。添加单元测试现在是向代码添加单元测试的时候了。在项目目录下创建名为test的文件夹。这是Mocha默认检查单元测试的地方。在test文件夹下添加traffic.test.js文件。接下来,在文件顶部导入TrafficLight:constTrafficLight=require("../traffic");我们将使用assert模块进行测试,因此我们也需要导入它:constassert=require("assert");在Mocha的帮助下,我们可以使用describe()函数对单元测试进行分组。所以我们可以为这个类设置一个顶级组,像这样:describe("TrafficLight",function(){});然后,我们在TrafficLight集合中添加单元测试来验证子组中的交通灯颜色,并调用colors:describe("TrafficLight",function(){describe("colors",function(){});});对于第一个单元测试,我们可以检查颜色是否只有三种状态:绿色、黄色和红色。使用it()函数在describe()组内定义测试。所以一个测试用例可以这样写:describe("TrafficLight",function(){describe("colors",function(){it("has3states",function(){consttraffic=newTrafficLight();assert.equal(3,TrafficLight.colors.length);});});});现在,让我们尝试运行单元测试并查看它们是否通过。在终端窗口中运行npmtest,如果一切正常,Mocha将打印出单元测试运行的结果。添加更多单元测试我们的项目现在已准备好运行单元测试,因此我们可以添加更多单元测试以确保代码正确运行。首先,向颜色组添加一个单元测试,以验证交通灯的颜色是否正确且有序。这是实现测试的一种方法:it("colorsareinorder",function(){constexpectedLightOrder=["green","yellow","red"];consttraffic=newTrafficLight();for(让我=0;i
