在本文中,我们将介绍两种基于JavaScript的编写单元测试的软件包,它们背后的代码以及最佳使用方式。
前言
在编写一个网站时,或者更经常地 - 一个单页的应用程序 - 需要测试它,就像其他任何代码一样。
当然有几种类型的测试,包括单元测试和集成测试。
尽管集成测试对整个应用程序的流程进行了端到端测试,并因此模拟了用户交互(需要特殊的基于浏览器的测试包),但单元测试运行的是特定的功能。
但是,在JavaScript中编写整个应用程序时,运行代码会更棘手一些。
一方面,我们不习惯用JavaScript编写单元测试,而是在浏览器中完全运行测试。另一方面,调用JavaScript代码,然后测试各种成员的值,在直接用JavaScript编写时更容易完成。
幸运的是,网络上的好人给了我们几个基于JavaScript的编写单元测试的包。我会谈论Jasmine,并添加一些关于Blanket的文字,它与Jasmine集成以执行代码覆盖。
Jasmine
Jasmine是一个基于JavaScript的库来执行单元测试。它由几个部分组成:
Runner
测试框架
插件
Runner
The Runner是一个带有基础代码的HTML文件,用于加载测试框架并运行测试。当你将它拿出来时,它不会做任何事情。您必须在其中添加自己的脚本,因此请将其视为模板。
基本的HTML如下所示:
<link rel=“shortcut icon” type=“image/png” href=“jasmine/lib/jasmine-2.0.0/jasmine_favicon.png”>
<link rel=“stylesheet” type=“text/css” href=“jasmine/lib/jasmine-2.0.0/jasmine.css”>
<script type=“text/javascript” src=“jasmine/lib/jasmine-2.0.0/jasmine.js”></script>
<script type=“text/javascript” src=“jasmine/lib/jasmine-2.0.0/jasmine-html.js”></script>
<script type=“text/javascript” src=“jasmine/lib/jasmine-2.0.0/boot.js”></script>
接下来,您需要添加您自己的应用程序脚本:
<script type=“text/javascript” src=“src/myApp.js”></script>
最后来到你的测试脚本:
<script type=“text/javascript” src=“tests/myAppTestSpec.js”></script>
2.测试框架
Jasmine有几个创建测试框架的文件。最基本的是以上列出的基本HTML示例。让我们快速浏览它们:
jasmine.js
最基本的要求。这是实际的框架。
jasmine-html.js
这个用于生成HTML报告。即使您不需要HTML报告,也是一项要求。
boot.js
这个是在Jasmine 2.0版本中添加的,它执行整个初始化过程。
编写测试
结构体
Jasmine中的单元测试被称为“规格”,并被包装在“套件”中。它看起来像这样:
describe(“A suite”, function() {
it(“contains spec with an expectation”, function() {
expect(true)。toBe(true);
});
});
该 函数描述了一个测试套件,而该 函数指定了一个测试。
describe it
请注意,作为参数,这两个名称和一个简单的功能块,并且该块在功能块的主体中被调用。这意味着您可以为每个测试套件存储“全局”成员。此外,这意味着测试代码会连同任何断言一起进入块中。
it describe it
预期(也称为其他测试套件)
在编写单元测试时,你期望会发生某些事情,如果没有,你会断言。而在其他测试套件中,您通常使用术语断言来执行此类操作,而在茉莉花中,您只需预期一些东西。
预期的语法很简单:
expect(true)。toBe(true);
有许多可用于该功能的“匹配器” ,包括但不限于:expect
toBe - 测试值实际上是一些对象(使用‘ === ’)。
toEqual - 测试值等于一些其他值。
toMatch - 根据正则表达式测试字符串。
toBeDefined/ toBeUndefined - 将值与‘ undefined ' 进行比较。
toBeTruthy/ toBeFalsy - 测试JavaScript的真实性 或 虚假性的值 .
toThrow/ toThrowError - 如果对象是一个函数,它期望它抛出一个异常。
您也可以通过在expect和matcher之间添加not来否定期望。
Spies
您也可以使用Jasmine来测试函数是否已被调用。另外,你可以(实际上需要)定义函数被调用时会发生什么。语法如下所示:
spyOn(someObject, “functionName”)。and.callThrough();
spyOn(someObject, “functionName”)。and.returnValue(123);
spyOn(someObject, “functionName”)。and.callFake( … alternative function implementation … );
spyOn(someObject, “functionName”)。and.throwError(“Error message”);
spyOn(someObject, “functionName”)。and.stub();
然后,您可以检查(期望)是否使用以下函数调用该函数:
expect(someObject.functionName)。toHaveBeenCalled();
或者
expect(someObject.functionName)。toHaveBeenCalledWith(… comma separated list of parameters …);
更多信息
Jasmine可以使用许多功能。你可以在这里阅读官方文档中的所有内容。
3.插件
那么,我只会谈论Blanket,与Jasmine集成的代码覆盖实用程序。
在运行程序中,在测试规范脚本之前添加以下行,但在应用程序脚本之后
<script type=“text/javascript” src=“lib/blanket.min.js” data-cover-adapter=“lib/jasmine-blanket-2_0.js”></script>
就是这样!
在测试结果报告下方会有代码覆盖率报告。
该blanket.js包可以被发现在这里,和Jasmine2.x的适配器,可以发现这里 (不幸的是,blanket.js只配备预包装与Jasmine1.x的转接器)。
以上就是潍坊培训学校给大家做的内容详解,更多关于java课程 的学习,请继续关注潍坊培训学校。