下面:
<!-- 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; } }
在最好的情况下,我们将在
>之前为此功能编写测试。我们编写代码。但是以测试驱动的开发是一个复杂的话题,就目前而言,我们只想专注于编写测试。开始,让我们回想一下单元测试背后的基本思想:我们给出某些输入的功能,然后验证功能的行为。那么此功能的输入和行为是什么? 给出一个元素和一个类名称:
>
<!-- load your test files here -->
>
但是,等等,测试功能在哪里?好吧,当我们省略其第二个参数时,摩卡咖啡在测试结果中将这些测试标记为。这是设置许多测试的便捷方法 - 有点像您打算写的待办事项列表。> 让我们继续实施第一个测试。
在此测试中,我们创建一个元素变量,并将其作为参数传递给AddClass函数,以及字符串测试类(要添加的新类)。然后,我们使用断言将课程包含在值中。
>assert.equal(arr.length, 0);
>
>尽管此功能旨在与DOM元素一起使用,但我们在此处使用一个普通的JS对象。有时,我们可以以这种方式利用JavaScript的动态性质来简化我们的测试。如果我们不这样做,我们将需要创建一个实际元素,这将使我们的测试代码复杂化。作为另一个好处,由于我们不使用DOM,因此我们也可以在Node.js中运行此测试。在浏览器中运行测试
要在浏览器中运行测试,您需要将className.js和classNametest.js添加到跑步者:
:>请参阅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)的笔单位测试。
在节点上运行测试
代码基本上保持不变,但结构略有不同:
,如您所见,测试通过了。
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,数据库和其他“外部”事物?>要安装Mocha和Chai,您需要在系统上安装Node.js和NPM。一旦拥有这些,您可以使用NPM安装摩卡和柴。打开终端并导航到您的项目目录。然后,运行以下命令:
npm install -save-dev mocha chai
>此命令安装摩卡和柴作为您项目的devDepentencies。 -save-dev标志用于在您的软件包中添加它们为开发依赖。json文件。
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可以轻松地与摩卡和柴一起集成以提供这些功能。
如何使用摩卡咖啡来生成测试报告?
以上是单位使用摩卡和柴测试您的JavaScript的详细内容。更多信息请关注PHP中文网其他相关文章!