Protractor - JavaScript 测试概念

由于 JavaScript 知识对于使用 Protractor 至关重要,因此在本章中,我们将详细了解 JavaScript 测试的概念。

JavaScript 测试和自动化

JavaScript 是最流行的动态类型和解释脚本语言,但最具挑战性的任务是测试代码。这是因为,与 JAVA 和 C++ 等其他编译语言不同,JavaScript 中没有可以帮助测试人员找出错误的编译步骤。此外,基于浏览器的测试非常耗时;因此需要支持 JavaScript 自动化测试的工具。

自动化测试的概念

编写测试始终是一种很好的做法,因为它可以使代码更好;手动测试的问题在于它有点耗时且容易出错。手动测试的过程对于程序员来说也相当无聊,因为他们需要重复这个过程,编写测试规范,更改代码并多次刷新浏览器。此外,手动测试也会减慢开发过程。

由于上述原因,拥有一些可以自动化这些测试并帮助程序员摆脱这些重复和无聊步骤的工具总是有用的。开发人员应该做些什么来使测试过程自动化?

基本上,开发人员可以在 CLI(命令行解释器)或开发 IDE(集成开发环境)中实现工具集。然后,即使没有开发人员的输入,这些测试也会在单独的进程中持续运行。JavaScript 的自动化测试也不是什么新鲜事,已经开发了许多工具,如 Karma、Protractor、CasperJS 等。

JavaScript 测试类型

可以针对不同目的进行不同的测试。例如,有些测试是为了检查程序中函数的行为而编写的,而有些测试是为了测试模块或功能的流程而编写的。因此,我们有以下两种类型的测试 −

单元测试

测试是在程序中可测试的最小部分(称为单元)上进行的。单元基本上是单独测试的,与其他部分没有任何依赖关系。对于 JavaScript,具有特定行为的单个方法或函数可以作为代码单元,并且这些代码单元必须以独立的方式进行测试。

单元测试的优点之一是单元测试可以按任何顺序进行,因为单元彼此独立。单元测试的另一个真正重要的优势是它可以随时运行测试,如下所示 −

  • 从开发过程一开始。
  • 完成任何模块/功能的开发后。
  • 修改任何模块/功能后。
  • 在现有应用程序中添加任何新功能后。

对于 JavaScript 应用程序的自动单元测试,我们可以从许多测试工具和框架中进行选择,例如 Mocha、Jasmine 和 QUnit。

端到端测试

它可以定义为用于测试应用程序从头到尾(从一端到另一端)的流程是否按照设计正常运行的测试方法。

端到端测试也称为功能/流程测试。与单元测试不同,端到端测试测试各个组件如何作为一个应用程序协同工作。这是单元测试和端到端测试之间的主要区别。

例如,假设我们有一个注册模块,用户需要提供一些有效信息才能完成注册,那么该特定模块的 E2E 测试将遵循以下步骤完成测试 −

  • 首先,它将加载/编译表单或模块。
  • 现在,它将获取表单元素的 DOM(文档对象模型)。
  • 接下来,触发提交按钮的单击事件以检查它是否正常工作。
  • 现在,出于验证目的,从输入字段收集值。
  • 接下来,应该验证输入字段。
  • 出于测试目的,调用一个假 API 来存储数据。

每个步骤都会给出自己的结果,这些结果将与预期结果集进行比较。

现在,问题是问题是,虽然这种 E2E 或功能测试也可以手动执行,但为什么我们需要自动化呢?主要原因是自动化将使这个测试过程变得简单。为此,可以轻松与任何应用程序集成的一些可用工具是 Selenium、PhantomJS 和 Protractor。

测试工具和框架

我们有各种用于 Angular 测试的测试工具和框架。以下是一些众所周知的工具和框架 −

Karma

Karma 由 Vojta Jina 创建,是一个测试运行器。该项目最初名为 Testacular。它不是一个测试框架,这意味着它使我们能够在真实浏览器上轻松自动地运行 JavaScript 单元测试。Karma 是为 AngularJS 构建的,因为在 Karma 之前,没有面向基于 Web 的 JavaScript 开发人员的自动化测试工具。另一方面,借助 Karma 提供的自动化功能,开发人员可以运行一个简单的命令并确定整个测试套件是通过还是失败。

使用 Karma 的优点

与手动流程相比,以下是使用 Karma 的一些优点 −

  • 在多个浏览器和设备中自动执行测试。
  • 监视文件中的错误并修复它们。
  • 提供在线支持和文档。
  • 简化与持续集成服务器的集成。

使用 Karma 的缺点

以下是使用 Karma 的一些缺点 −

使用 Karma 的主要缺点是它需要额外的工具来配置和维护。

如果您将 Karma 测试运行器与 Jasmine 一起使用,则可用的文档较少有关在一个元素有多个 ID 的情况下设置 CSS 的信息。

Jasmine

Jasmine 是一个用于测试 JavaScript 代码的行为驱动开发框架,由 Pivotal Labs 开发。在 Jasmine 框架积极开发之前,Pivotal Labs 还开发了一个名为 JsUnit 的类似单元测试框架,它有一个内置的测试运行器。浏览器测试可以通过 Jasmine 测试来运行,方法是包含 SpecRunner.html 文件,也可以将其用作命令行测试运行器。它可以与 Karma 一起使用,也可以单独使用。

使用 Jasmine 的优点

以下是使用 Jasmine 的一些优点 −

  • 独立于浏览器、平台和语言的框架。

  • 支持测试驱动开发 (TDD) 以及行为驱动开发。

  • 默认与 Karma 集成。

  • 易于理解的语法。

  • 提供测试间谍、伪造和传递功能,作为附加功能协助测试。

使用 Jasmine 的缺点

以下是使用 Jasmine 的缺点 −

  • 测试必须在发生变化时由用户返回因为在运行测试时 Jasmine 中没有可用的文件监视功能。

Mocha

Mocha 是为 Node.js 应用程序编写的测试框架,但它也支持浏览器测试。它与 Jasmine 非常相似,但它们之间的主要区别在于 Mocha 需要一些插件和库,因为它不能作为测试框架独立运行。另一方面,Jasmine 是独立的。但是,Mocha 比 Jasmine 使用起来更灵活。

使用 Mocha 的优点

以下是使用 Mocha 的一些优点 −

  • Mocha 非常易于安装和配置。
  • 用户友好且文档简单。
  • 包含带有多个节点项目的插件。

使用 Mocha 的缺点

以下是使用 Mocha 的一些缺点 −

  • 它需要单独的模块用于断言、间谍等。
  • 它还需要额外的配置才能与 Karma 一起使用。

QUnit

QUint 最初由 John Resig 于 2008 年作为 jQuery 的一部分开发,是一款功能强大且易于使用的 JavaScript 单元测试套件。它可用于测试任何通用 JavaScript 代码。虽然它专注于在浏览器中测试 JavaScript,但开发人员使用它非常方便。

使用 QUnit 的优点

以下是使用 QUnit 的一些优点 −

  • 易于安装和配置。
  • 用户友好且文档简单。

使用 QUnit 的缺点

以下是使用 QUnit −

  • 它主要为 jQuery 开发,因此不太适合与其他框架一起使用。

Selenium

Selenium 最初由 Jason Huggins 于 2004 年作为 ThoughtWorks 的内部工具开发,是一种开源测试自动化工具。 Selenium 将自己定义为"Selenium 自动化浏览器。就是这样!"。浏览器自动化意味着开发人员可以非常轻松地与浏览器交互。

使用 Selenium 的优点

以下是使用 Selenium 的一些优点 −

  • 包含大量功能。
  • 支持分布式测试。
  • 通过 Sauce Labs 等服务获得 SaaS 支持。
  • 易于使用,文档简单,资源丰富。

使用 Selenium 的缺点

以下是使用 Selenium 的一些缺点 −

  • 使用 Selenium 的主要缺点是它必须作为单独的进程运行。
  • 配置有点麻烦,因为开发人员需要遵循几个步骤。