单位使用摩卡和柴测试您的JavaScript
下面:
<!-- load your test files here -->
>添加了脚本后,您可以将测试跑者页面加载到选择的浏览器中。
测试结果
进行测试时,测试结果将看起来像这样:
>
>请注意,我们输入的描述及其功能显示在输出中 - 测试在描述下分组。请注意,还可以嵌套描述块以创建进一步的子组。
>>让我们看看一个失败的测试的外观。
>在测试中的行上说:
assert.equal(arr.length, 0);
>将数字0替换为1。这使得测试失败,因为数组的长度不再匹配预期值。
如果您再次运行测试,则会在红色中看到失败的测试,并描述出了什么问题。
>
测试的好处之一是它们可以帮助您更快地发现错误,但是此错误在这方面并不是很有帮助。我们可以修复它。
大多数断言功能也可以采用可选消息参数。这是当断言失败时显示的消息。使用此参数使错误消息易于理解是一个好主意。
>我们可以在我们的断言中添加一条消息:
assert.equal(arr.length, 1, 'Array length was not 0');
如果您重新运行测试,则自定义消息将出现而不是默认。
>>让我们将主张切换回原状 - 用0替换1,然后再次运行测试以确保它们通过。
将其放在一起
到目前为止,我们已经研究了相当简单的示例。让我们将我们所学的知识付诸实践,看看如何测试更现实的代码。>
>这是一个将CSS类添加到元素的函数。这应该在一个新文件js/className.js。为了使其更有趣,我只有在该类不存在的元素类名称属性中才能添加一个新类 - 毕竟谁想看
function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
在最好的情况下,我们将在
>之前为此功能编写测试。我们编写代码。但是以测试驱动的开发是一个复杂的话题,就目前而言,我们只想专注于编写测试。开始,让我们回想一下单元测试背后的基本思想:我们给出某些输入的功能,然后验证功能的行为。那么此功能的输入和行为是什么? 给出一个元素和一个类名称:
- >如果元素的className属性不包含类名称,则应添加。 >
- 如果元素的className属性确实包含类名称,则不应添加。
>
<!-- load your test files here -->
>
但是,等等,测试功能在哪里?好吧,当我们省略其第二个参数时,摩卡咖啡在测试结果中将这些测试标记为。这是设置许多测试的便捷方法 - 有点像您打算写的待办事项列表。> 让我们继续实施第一个测试。
在此测试中,我们创建一个元素变量,并将其作为参数传递给AddClass函数,以及字符串测试类(要添加的新类)。然后,我们使用断言将课程包含在值中。
>assert.equal(arr.length, 0);
>
>尽管此功能旨在与DOM元素一起使用,但我们在此处使用一个普通的JS对象。有时,我们可以以这种方式利用JavaScript的动态性质来简化我们的测试。如果我们不这样做,我们将需要创建一个实际元素,这将使我们的测试代码复杂化。作为另一个好处,由于我们不使用DOM,因此我们也可以在Node.js中运行此测试。在浏览器中运行测试
要在浏览器中运行测试,您需要将className.js和classNametest.js添加到跑步者:
:>您现在应该看到一个测试通行证,另一种测试显示为待处理,如以下Codepen所证明的那样。请注意,代码与示例略有不同,以使代码在Codepen环境中起作用。
>请参阅codepen上的sitepoint(@sitepoint)的摩卡(1)的笔单元测试。
assert.equal(arr.length, 1, 'Array length was not 0');
>
>经常进行测试是一个很好的习惯,所以让我们检查一下如果我们现在进行测试会发生什么。正如预期的那样,它们应该通过。
这是另一个实施第二个测试的Codepen。
>function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
但请坚持下去!我实际上有点欺骗你。我们尚未考虑此功能的第三个行为。该功能也有一个错误 - 相当严重的函数。这只是三行函数,但您注意到了吗?
>>让我们再为第三个行为写一个测试,该行为将错误视为奖励。
<!-- load your test files here -->
>请参阅codepen上的sitepoint(@sitepoint)的摩卡(3)的笔单元测试。
>让我们修复功能并进行测试。
assert.equal(arr.length, 0);
>请参阅codepen上的sitepoint(@sitepoint)的摩卡(4)的笔单位测试。
在节点上运行测试
在节点中,仅在同一文件中的其他事物可见。由于className.js和classNametest.js在不同的文件中,我们需要找到一种将一个公开的方法。这样做的标准方法是通过使用模块。如果需要复习,则可以在此处阅读所有内容:了解node.js
中的模块和导出代码基本上保持不变,但结构略有不同:
,如您所见,测试通过了。
assert.equal(arr.length, 1, 'Array length was not 0');
function addClass(el, newClass) { if(el.className.indexOf(newClass) === -1) { el.className += newClass; } }
下一步是什么?
如您所见,测试不必复杂或困难。就像编写JavaScript应用程序的其他方面一样,您也有一些重复的基本模式。一旦熟悉这些,您就可以一遍又一遍地使用它们。
,但这只是刮擦表面。关于单元测试还有很多要学习的内容。
>测试更复杂的系统
>
如何处理AJAX,数据库和其他“外部”事物?- >测试驱动的开发
- 如果您想继续学习此信息,我创建了一个免费的JavaScript单元测试QuickStart系列。如果您发现这篇文章有用,则绝对应该在此处查看。
- 另外,如果视频更像是您的样式,您可能对Sitepoint Premium的课程感兴趣:Node.js. 中的测试驱动开发
经常询问有关使用摩卡和柴的单位测试JavaScript的问题
>如何在JavaScript中安装Mocha和Chai进行单位测试?>>要安装Mocha和Chai,您需要在系统上安装Node.js和NPM。一旦拥有这些,您可以使用NPM安装摩卡和柴。打开终端并导航到您的项目目录。然后,运行以下命令:
npm install -save-dev mocha chai
>此命令安装摩卡和柴作为您项目的devDepentencies。 -save-dev标志用于在您的软件包中添加它们为开发依赖。json文件。
>如何使用Mocha和Chai和Chai编写基本测试?摩卡咖啡和柴涉及创建一个测试文件并在其中编写测试案例。这是一个简单的示例:
var Expect = require('chai')。期望;
descript('Basic Mocha string test',function(){
>期望('Hello')。此示例,描述是一个测试套件,该套件将相关的测试分组,这是一个测试案例。 CHAI的期望功能用于主张预期的输出。
>如何运行摩卡咖啡测试?
运行摩卡咖啡测试,导航到终端中的项目目录并运行以下命令:
>此命令运行安装在node_modules文件夹中的摩卡二进制二进制文件。如果您想简单地将此命令作为摩卡咖啡运行,则可以使用NPM install -G Mocha在全球安装摩卡样式 - 应该,期望和断言。应该使用应有的属性扩展每个对象以启动链条。期望风格提供了一种更传统的基于功能的方法。断言风格提供了一种经典的,简单的写作方式。
>如何使用摩卡咖啡和Chai?
mocha和chai测试异步代码,并提供了几种测试异步代码的方法。您可以使用回调,承诺或异步/等待。这是一个使用异步/等待的示例:
> it('async test',async function(){
const result =等待myAsyncfunction();
> );
>
>如何在摩卡咖啡中使用钩子?
摩卡咖啡提供类似以前,之后,之前和之后的钩子,您可以用来设置先决条件并在测试后清理。这是一个示例:
describe('hooks',function(){
> function(function(){
//在此块
}中进行第一个测试之前一次运行一次); //在此块
}中进行最后一次测试后一次运行一次)此块中的每个测试
});
aftereach(function(){
//在此块中的每个测试之后运行
});
})
>如何测试Chai的异常?以下是一个示例:
it('抛出错误',function(){
> Expect(function(function(){thur new错误('错误值'})。to.throw('错误('错误value');
>
>我如何使用间谍,存根和模拟与Mocha和Chai?间谍,存根和与摩卡咖啡和柴一起模拟,您可以使用Sinon.js之类的图书馆。 sinon.js可以轻松地与摩卡和柴一起集成以提供这些功能。
如何使用摩卡咖啡来生成测试报告?
,尼安等等。您可以在运行测试时指定与 - Reporter选项一起使用的记者。例如,Mocha -ReporterNyan。>
以上是单位使用摩卡和柴测试您的JavaScript的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务
