目录
测试结果
将其放在一起
在节点中,仅在同一文件中的其他事物可见。由于className.js和classNametest.js在不同的文件中,我们需要找到一种将一个公开的方法。这样做的标准方法是通过使用模块。如果需要复习,则可以在此处阅读所有内容:了解node.js
,但这只是刮擦表面。关于单元测试还有很多要学习的内容。
>如何使用Mocha和Chai和Chai编写基本测试?摩卡咖啡和柴涉及创建一个测试文件并在其中编写测试案例。这是一个简单的示例:
>如何在摩卡咖啡中使用钩子?
首页 web前端 js教程 单位使用摩卡和柴测试您的JavaScript

单位使用摩卡和柴测试您的JavaScript

Feb 16, 2025 am 11:03 AM

Unit Test Your JavaScript Using Mocha and Chai

下面:

<!-- load your test files here -->
登录后复制
登录后复制
登录后复制

>添加了脚本后,您可以将测试跑者页面加载到选择的浏览器中。

测试结果

进行测试时,测试结果将看起来像这样:

>

单位使用摩卡和柴测试您的JavaScript

>请注意,我们输入的描述及其功能显示在输出中 - 测试在描述下分组。请注意,还可以嵌套描述块以创建进一步的子组。

>

>让我们看看一个失败的测试的外观。

>

在测试中的行上说:

assert.equal(arr.length, 0);
登录后复制
登录后复制
登录后复制

>将数字0替换为1。这使得测试失败,因为数组的长度不再匹配预期值。>

如果您再次运行测试,则会在红色中看到失败的测试,并描述出了什么问题。

>

单位使用摩卡和柴测试您的JavaScript

测试的好处之一是它们可以帮助您更快地发现错误,但是此错误在这方面并不是很有帮助。我们可以修复它。

大多数断言功能也可以采用可选消息参数。这是当断言失败时显示的消息。使用此参数使错误消息易于理解是一个好主意。

>

我们可以在我们的断言中添加一条消息:

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属性确实包含类名称,则不应添加。
>让我们将这些案例转换为两个测试。在测试目录中,创建一个新的文件classNametest.js并添加以下内容:

>

<!-- load your test files here -->
登录后复制
登录后复制
登录后复制
>我们将措辞稍微更改为“ IT应该执行X”表单,并与测试一起使用。这意味着它的读数有点更好,但是基本上仍然是我们上面列出的人类可读形式。从想法到测试通常比这更困难。

>

但是,等等,测试功能在哪里?好吧,当我们省略其第二个参数时,摩卡咖啡在测试结果中将这些测试标记为待处理

。这是设置许多测试的便捷方法 - 有点像您打算写的待办事项列表。> 让我们继续实施第一个测试。

在此测试中,我们创建一个元素变量,并将其作为参数传递给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;
  }
}
登录后复制
登录后复制
登录后复制
>请参阅codepen上的sitepoint(@sitepoint)的摩卡(2)的笔单元测试。

但请坚持下去!我实际上有点欺骗你。我们尚未考虑此功能的第三个行为。该功能也有一个错误 - 相当严重的函数。这只是三行函数,但您注意到了吗?

>

>让我们再为第三个行为写一个测试,该行为将错误视为奖励。

<!-- load your test files here -->
登录后复制
登录后复制
登录后复制
这次测试失败。您可以在下面的Codepen中看到它。这里的问题很简单:元素中的CSS类名称应由空间分开。但是,我们当前的AddClass实现不会添加空间!

>请参阅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 如您所见,测试不必复杂或困难。就像编写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(){ it('应该返回字符串中的charachter',function(){
    >期望('Hello')。此示例,描述是一个测试套件,该套件将相关的测试分组,这是一个测试案例。 CHAI的期望功能用于主张预期的输出。
    >如何运行摩卡咖啡测试?

    运行摩卡咖啡测试,导航到终端中的项目目录并运行以下命令:
    >此命令运行安装在node_modules文件夹中的摩卡二进制二进制文件。如果您想简单地将此命令作为摩卡咖啡运行,则可以使用NPM install -G Mocha在全球安装摩卡样式 - 应该,期望和断言。应该使用应有的属性扩展每个对象以启动链条。期望风格提供了一种更传统的基于功能的方法。断言风格提供了一种经典的,简单的写作方式。

    >如何使用摩卡咖啡和Chai?

    mocha和chai测试异步代码,并提供了几种测试异步代码的方法。您可以使用回调,承诺或异步/等待。这是一个使用异步/等待的示例:

    > it('async test',async function(){
    const result =等待myAsyncfunction();
    > );

    });

    在此示例中,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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1230
24
神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

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

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

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

JavaScript引擎:比较实施 JavaScript引擎:比较实施 Apr 13, 2025 am 12:05 AM

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

JavaScript:探索网络语言的多功能性 JavaScript:探索网络语言的多功能性 Apr 11, 2025 am 12:01 AM

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

Python vs. JavaScript:学习曲线和易用性 Python vs. JavaScript:学习曲线和易用性 Apr 16, 2025 am 12:12 AM

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

如何使用Next.js(前端集成)构建多租户SaaS应用程序 如何使用Next.js(前端集成)构建多租户SaaS应用程序 Apr 11, 2025 am 08:22 AM

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

从C/C到JavaScript:所有工作方式 从C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

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

使用Next.js(后端集成)构建多租户SaaS应用程序 使用Next.js(后端集成)构建多租户SaaS应用程序 Apr 11, 2025 am 08:23 AM

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

See all articles