当应用程序的复杂性和规模不断增加时,手动测试新特性的可靠性、捕捉bug和回归测试是不切实际的。
为了解决这个问题,我们设置了angular Scenario Runner,模拟用户的操作,帮助我们验证angular应用的健壮性。
一.摘要
我们可以用javascript编写场景测试来描述我们的应用程序的行为,并在特定的状态下给出一些交互。一个场景包含一个或多个“it”块(我们可以将这些块视为我们应用程序的需求),这些块依次由命令和期望组成。命令告诉runner在应用程序中做一些事情(比如转到一个页面或者点击一个按钮),期望告诉Runner判断一些关于状态的事情(比如一个字段的值或者当前的URL)。如果任何期望失败,跑步者将这个“它”标记为“假”,然后继续下一个“它”。场景还可以有“每个之前”和“每个之后”块,它们将在每个“它”块之前或之后运行,不管它是否通过。
除了上述元素,场景还可以包含帮助器功能,以避免“它”块中的重复代码。
下面是一个简单的场景示例:
描述(‘Buzz Client’、function(){ it’(应该过滤结果)、function(){ input(‘user’)。输入(' jacks parrow ');元素(' :button ')。单击();expect(中继器(' ul li ')。count())。toeqal(10);输入(' filterText ')。输入('蜜蜂');expect(中继器(' ul li ')。count())。toeqal(1);});});这个场景描述了网络客户端的需求,具体来说,它应该具备过滤用户的能力。开始时,它在“用户”输入框中输入一个值,单击页面上唯一的按钮,然后验证是否有10个项目列表。然后,它将“蜜蜂”输入“过滤器文本”的输入框,然后验证列表是否会减少到只有一个项目。
下面的应用编程接口部分列出了Runner中可用的命令和期望。
第二,原料药
源代码:https://github.com/angular/angular . js/blob/master/src/ngssenario/DSL . js。
暂停()
暂停测试的执行,直到我们在控制台中调用resume()为止(或者单击Runner界面中的resume链接)
睡眠(秒)
暂停测试执行n秒钟。
浏览器()。导航到(网址)
在tset框架中加载指定的url。
浏览器()。导航到(网址,fn)
fn返回的url地址被加载到测试框架中。此处的url参数仅用作测试输出。当目标url是动态的(编写测试时地址仍然未知)时,可以使用这个API。
浏览器()。重新加载()
在测试框架中刷新当前加载的页面。
浏览器()。窗口()。href()
返回测试框架当前页面的Window.location.href。
浏览器()。窗口()。路径()
返回测试帧当前页面的window.location.pathname。
浏览器()。窗口()。搜索()
Window.location .返回对测试框架当前页面的搜索。
浏览器()。窗口()。哈希()
返回测试框架当前页面的Window.location.hash(不包括#)。
浏览器()。位置()。url()
返回测试框架(http://docs.angularjs.org/api/ng当前页面的$location.url()的返回结果。$location)
浏览器()。位置()。路径()
返回$location的返回结果。测试框架(http://docs.angularjs.org/api/ng当前页面的路径()。$location)
浏览器()。位置()。搜索()
返回$location的返回结果。搜索()测试框架(http://docs.angularjs.org/api/ng的当前页面。$location)
浏览器()。位置()。哈希()
返回$location的返回结果。测试框架(http://docs.angularjs.org/api/ng当前页面的哈希()。$location)
期待(未来)。{火柴人}
判断给定的未来值是否满足匹配器。所有的API声明在执行后都会返回一个具有指定值的未来对象。Matcher是用angular.scenario.matcher来定义的,他们用期货的价值来进行预期。例如:
expect(浏览器)()。位置()。href())。toeqal(' http://www . Google.com ');
期待(未来)。不是()。{火柴人}
确定给定未来的值是否与指定匹配者的预期相反。
使用(选择器、标签)
确定下一个DSL元素选择的范围。(可能限制了选择器的范围,标签估计用于测试输出)
示例:
使用(' #foo ',' foo '文本字段')。输入('条')
绑定(名称)
返回与指定名称匹配的第一个绑定(可能与ng-bind相关)。
输入(姓名)。输入(值)
在由名称指定的表单字段中输入指定的值。
输入(姓名)。检查()
选中或取消选中指定名称的复选框。
输入(姓名)。选择(值)
检查输入[type="radio"],其值是指定名称的收音机中的值。
输入(姓名)。val()
返回指定名称的当前输入值。
中继器(选择器、标签)。计数()
返回与指定选择器(jQuery选择器)匹配的中继器行数。标签仅用作测试输出。
中继器(“#产品表”、“产品列表”)。count()//行数
中继器(选择器、标签)。行(索引)
返回一个数组,该数组绑定到由指定选择器(jQuery选择器)匹配的转发器中指定索引的行。标签仅用于测试输出。
中继器(“#产品表”、“产品列表”)。行(1)//作为数组的行中的所有绑定
中继器(选择器、标签)。列(绑定)
返回与指定选择器(jQuery选择器)匹配的中继器中的指定绑定相匹配的列数组。标签仅用于测试输出。
中继器(“#产品表”、“产品列表”)。列(' product . name ')//数组中所有行的所有值
选择(名称)。选项(值)
在选择指定名称中选择指定值的选项。
选择(名称)。选项(值1、值2)
在选择指定名称中选择指定值的选项。
元素(选择器、标签)。计数()
返回与指定选择器匹配的元素数量。标签仅用作测试输出。
元素(选择器、标签)。点击()
单击与指定选择器匹配的元素。标签仅用作测试输出。
元素(选择器、标签)。查询(fn)
执行指定的fn(selectedElements,done),其中selectedElement是匹配指定选择器的元素集;done是一个函数,它将在fn执行后执行。标签仅用作测试输出。
元素(选择器、标签)。{方法}()
返回在指定选择器匹配的元素上执行方法的返回值。该方法可以是以下jQuery方法:val、text、html、height、innerHeight、outerHeight、width、innerWidth、outerWidth、position、scroll lt、scrollTop和offset。标签仅用作测试输出。
元素(选择器、标签)。{方法}(值)
对由指定选择器匹配的元素执行指定的方法,并将键和值作为参数。该方法可以是以下jQuery方法:val、text、html、height、innerHeight、outerHeight、width、innerWidth、outerWidth、position、scroll lt、scrollTop和offset。标签仅用作测试输出。
元素(选择器、标签)。{方法}(键)
返回在指定选择器的匹配元素上执行指定方法的结果,可以是以下jQuery方法:attr、prop、css。标签仅用作测试输出。
元素(选择器、标签)。{方法}(键,值)
使用键和值作为参数,对指定选择器匹配的元素执行方法。这些方法可以是以下jQuery方法:attr、prop、css。标签仅用作测试输出。
Javascript是一种动态类型语言,它带来了强大的表达式,但同时我们几乎得不到编译器的任何帮助。因此,我们强烈地感到,任何用javascript编写的代码都需要大量全面的测试。Angular有许多特性,使我们更容易测试应用程序。所以我们没有借口不写测试。(-_-!)
以上是AngularJs E2E检测的数据整理,后续继续补充相关数据。感谢您对本网站的支持!