有许多原因使我过去不愿对自己的应用添加自动化测试。原因之一是不知道其中的效益成本比率,另一个原因是考虑到集成到现有生产环境的应用可能比较难。测试应用而不用从头重构代码,仅仅只是引入测试要怎么做呢? 首先我们先从简单区分测试的类型开始。应用测试有很多类型,但最为常见的是单元测试及端对端测试(亦称为集成测试)。单元测试是测试代码自身行为的一种测试。在用户看来什么也没有做,但可以确保其方法能达到期望的目的。集成测试是模仿用户行为的一种测试。比如说,登陆系统,创建帖子,退出系统等这些操作都可以自动化,并且你可以用眼睛看到其过程是怎么发生的。
|
这两种类型的测试,它们通常彼此结合使用。对于新的开发来说,这将是理想的。如果时间有限制,或继承于现有项目的情况下,端对端测试或许比单元测试更加合适。因为我们并不需要过多了解先前的代码库,同样可以覆盖更多场景,这将比单元测试更快,因为单元测试并不测试单个单元而是整个场景。 单元测试依然重要,但如果你必须要在开始的时候选择一个,我认为端对端测试会是更好的选择。在这篇文章中,我将测试一个现有的Angular 2的待办事项的项目。我将使用集成测试,并覆盖一系列的场景。 如果你需要熟悉Angular 2的入门,请看这篇文章 Angular 2 article from Jscrambler。 |
被测试的场景
|
Todo 应用程序概述让我们简单的描述一下TODO应用程序。应用程序将首先在主页上列出待办事项清单。有三个待办事项会详细列出。 这写数据不会由服务端提供,而是从设备文件硬编码中加载。 在首页上,我们可以添加新的待办事项。我们可以通过点击代办事项的标题来访问其详细信息页面。在此页面上,我们可以编辑代办事项标题或删除待办事项。 克隆并设置Todo 应用程序 1.首先克隆我已经推送到存储库这里但未经测试的应用程序,确保你是在主分支克隆的。接下来,你需要安装几个工具以便能进行下面的操作,在本教程中,使用Candidate已经发布的Angular 2,版本为2。 2.确保您已安装NodeJS的版本是Node 4.x.x或更高版本。 3.使用以下命令安装节点依赖项:
当然是在克隆的存储库中操作 4.使用Angular-CLI进行开发。安装Angular-CLI 全局使用下面命令:
5.Angular 2 端到端测试使用被称为 protractor 的工具来运行,安装protractor 全局使用下面命令:
6.安装所有依赖项后,使用以下命令启动开发服务器:
然后导航到浏览器地址:http://localhost:4200,您将看到三个待办事项列表。 如果您在启动服务器时遇到问题,您可以参考stackoverflow issue来解决问题。 |
Angular 2测试相关的重要概念
|
在引入声明(import statement)之后,我们有一个描述性的代码块,它的两个函数调用即 beforeEach 和它里面的回调。 在描述代码块内,每个回调传递给 beforeEach 都需要测试。 每个测试再把里面的回调函数传递给它。 让我们用命令运行当前的测试
如果你在运行 protractor 两个命令中的一个时有问题,请参考这里。
或者
要是当前的测试失败,可能会在首页看到“app works”这样的文本提示。这并不是因为我们修改了首页的内容就出现这种情况。 在我们开始编写我们的测试之前,让我们理解一些重要的通用函数,然后使用 Angular 2 的端到端测试。
|
导航到页面在测试文件中,有一个browser全局变量。它使用import语句引入
你现在可以添加上。 例如,我们使用下面语句导航到你的应用程序中可用的任何页面
到你的主页,和
到users页面。请注意,这些网址是相对的URL,我们也可以使用绝对URL,但是我建议使用相对URL,因为如果你的域名改变,这更易于维护。 选择元素通常的做法是在当前页面上选择元素。你可以通过一个叫做element的全局变量选择元素。它接受可以使用全局by创建的定位器。 使用选择具有green类的p标签例子如下
选择多个元素,有些轻微的变化
这将给出一个数组,而不是一个单一的元素。 抓取元素文本
|
1
2
|
let greenParagraph = element(by.css( 'p.green' )); let text = greenParagraph.getText(); |
点击元素
点击元素可以使用下面的语法完成
1
2
|
let submitButton = element(by( "form .submit-button" )); submitButton.click(); |
统计元素
我们也可以使用下面的语法来统计元素个数。
1
2
|
let blueParagraphsList = elements.all(by( "p.blue" )); let count = blueParagraphsList.count(); |
Test Scenarios测试方案
|
1
2
3
4
5
|
it( "should show three todos when we first load the todo app" , () => { browser.get( "/" ); let todos = element.all(by.css( ".todos .todo" )); expect(todos.count()).toEqual( 3 ); }) |
不要忘记在这个文件的顶部添加这个导入声明
1
|
import { browser, element, by } from 'protractor/globals' ; |
现在,当你运行 protractor 命令,另一个浏览器将会被打开且迅速关闭,在你的控制台上你能看到通过测试的时候显示为绿色。
好的!我们刚刚已经写完了我们第一个通过 Angular 2 的端到端测试。
添加一个新的待办事项现在进行下一个,我们可以添加一个待办事项。让我们用下面的代码添加一个测试块
我们在这里要做的是在待办事项输入框中输入文本并提交表单。然后我们检查是否有四个待办事项。 如果是的话,测试通过。 我们刚刚介绍了另一个函数sendKeys,它可以访问一个选中的元素,常用于输入文本到输入框这类元素中。 查看待办事项的详情页我们应该能单击一个待办事项转到该待办事项的详情页,让我们用下面的测试实现它吧。
删除一个待办事项我们应该能删除一个待办事项。现在让我们试着删除一个待办事项看看能不能成功。 我们将转到待办事项页并单击删除链接,当我们返回主页时,我们能看到减少了一个待办事项。
编辑一个待办事项的标题我们能编辑待办事项的标题,保存后能在主页的待办事项列表中显示新标题。
不能保存空的待办事项当我们想保存一个空的待办事项时,我们无法进行操作,并且单击禁用按钮时,待办事项列表依然保持同样的长度。
保存按钮在初始化时禁用初始化时添加待办事项按钮被禁用,所以我们添加下列代码
当我们开始输入时启用保存按钮只用当我们开始输入待办事项标题时,待办事项保存按钮才被启用。
|
结论现在,我们来总结一下 Angular2 的“端对端”测试。即使您没有任何的编程基础,也可以快速上手编写“端对端”测试。对于那些被引入代码库而又可能存在漏洞的部分,“端对端”测试是一个高效便捷的方法来捕获问题所在。 |
本文标题:初步了解 Angular 2 端到端的测试
本文地址:https://www.oschina.net/translate/getting-started-with-angular-2-end-to-end-testing
参与翻译:imqipan, 无若, Tony, 3442853561, 独孤俊杰, wnull
英文原文:Getting Started with Angular 2 End To End Testing