Rspec: feature spec 功能测试 测试JavaScript.
我们要把应用各组件放在一起做集成 测试,这样才能保证模型和控制器之间能够良好契合。
在 RSpec 中,这种测试称为功能测试(feature spec),有时也称为验收测试(acceptance test)或集成测试(integration test)。这种测试的作用是确保 软件作为一个整体能按预期使用。
Capybara库 (8000star),用来定义功能测试的步骤,模拟真实用户的使用过程。 5.1已经自带这个库,因为系统测试依赖它。
Rails5.1 框架增加了系统测试。用的是MiniTest.
作者喜欢使用Rspec开发Rails应用。
在spec/rails_helper.rb中加入 require 'capybara/rspec'
6.3 一个简单的功能测试
bin/rails generate rspec:feature projects
feature test 和controller test 的区别:控制器测试绕过用户界面,直接把参数发给controller actions.
用到了expect{}.to , scenario作用等同于it。
6.2 Capybara DSL
除了 ,click_link, fill_in, with, click_button还有很多方法。
选择符还可以限定范围,让 Capybara 在页面的某一部分中(within)查找指定的元素。假设有如下的
HTML:
<div id="node">
<a href="http://nodejs.org">click here!</a>
</div>
<div id="rails">
<a href="http://rubyonrails.org">click here!</a>
</div>
我们可以像下面这样指明点击哪个“click here!”链接:
within "#rails" do
click_link "click here~!"
end
此外,还可以使用 Capybara 提供的多个 find 方法找出特定元素及其值。例如:
language = find_field("Programming language").value
expect(language).to eq "Ruby"
find("#fine_print").find("#disclaimer").click
find_button("Publish").click
以上是我最常使用的 Capybara 方法 ,完整方法见Capybara DSL 文档。
6.5调试feature test
save_and_open_page,保存并打开出错的页面。需要手动打开open tmp/...。
安装gem 'launchy'后可以自动打开保存的HTML文件。
测试完成后,应当在提交版本控制之前,把不需要的save_and_open_page删除。
6.6测试JavaScript交互
bin/rails g rspec:feature tasks
be_completed 匹配器matcher :
js:true选项传给scenario,Capybara默认带JS驱动。
然后变更运行浏览器,换为Chrome运行测试
配置:
1. spec/rails_helper.rb中把下面一行注释去掉,
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
2. 创建文件 spec/support/capybara.rb,并写:
Capybara.javascript_driver = :selenium_chrome
3. 安装ChromeDriver.需要看
见 ChromeDriver 官方文档。
如果安装了brew,则敲击brew install chromedriver
出现提示:
安装提示安装,成功。
运行bin/rspec spec/features/tasks_spec.rb,弹出chrome窗口,我们的应用在这个窗口加载,自动点击连接填写表单自动,完成任务,测试成功。为了运行效率只在需要JavaScript的案例上面使用js:true
6.7headless driven
不在浏览器窗口 运行测试,只在命令行界面中运行。禁止打开新窗口。
让Selenium在Chrome的无界面模式下运行测试:
编辑spec/support/capybara.rb.
Capybara.javascript_driver = :selenium_chrome_headless
6.8 等待JavaScript执行完毕
默认情况下,Capybara等待2了,如果没有按钮出现,放弃,这个时间可以调整。
Capybara.default_max_wait_time = 15
这个设置在rspec/rails_helper.rb内加载的地方就行,可以放在capybara.rb文件中。
缺点:整体速度变慢,
可以使用using_wait_time针对特定案例修改时间。
scenario "runs a really slow process" do
using_wait_time(15) do
# 测试代码
end
end
6.9小结
功能测试,先在浏览器实操以下模拟需要的步骤,然后在使用Capybara一一实现。
站在客户角度,看有些操作是否可以简化,甚至删除,从而提升用户体验。
Rspec: feature spec 功能测试 测试JavaScript.的更多相关文章
- 通过Jasmine和Guard自动测试JavaScript
原文标题:Autotesting JavaScript with Jasmine and Guard 原文地址:http://edspencer.net/2013/06/15/autotesting- ...
- 一个免费的自动化跨平台测试JavaScript的工具——BrowserSwarm
BrowserSwarm是一个免费工具,能够自动化跨平台测试JavaScript.
- 使用Jest测试JavaScript (入门篇)
1 什么是 Jest? Jest是 Facebook 的一套开源的 JavaScript 测试框架, 它自动集成了断言.JSDom.覆盖率报告等开发者所需要的所有测试工具,是一款几乎零配置的测试框架. ...
- Mozilla正在SpiderMonkey中测试JavaScript并行计算
Mozilla正致力于实现JavaScript“并行(parallelism)计算”,以便充分利用硬件性能.Dave Herman是Mozilla Research的首席研究员和策略总监.近日,他在一 ...
- 运用PhantomJS测试JavaScript
我认为我不需要说服你,测试你的JavaScript代码是一个好主意.但是,测试需要DOM操作的JavaScript代码有时候确是繁琐的.这意味着你需要在浏览器中测试代码而不能使用终端,对吗?错了,事实 ...
- 测试JavaScript数组Array
<script> var numbers = [1, 2, 3, 4, 5]; function isLessThan3(value,index,array) { var returnVa ...
- [js测试]JavaScript Web Quiz By davidshariff
Question1 var foo = function foo() { console.log(foo === foo); }; foo(); 输出是"true",因为foo就指 ...
- Rails 4.0 bundle exec rspec spec/requests/xxx 测试失败的解决
rails项目没有使用默认的单元测试包,而是使用了rspec-rails来测试. 按照文档说明首先生成对应的测试文件: rails generate integration_test xxx invo ...
- 新书《编写可测试的JavaScript代码 》出版,感谢支持
本书介绍 JavaScript专业开发人员必须具备的一个技能是能够编写可测试的代码.不管是创建新应用程序,还是重写遗留代码,本书都将向你展示如何为客户端和服务器编写和维护可测试的JavaScript代 ...
随机推荐
- Java应用开发的一条重要经验:先建立基础设施
一旦为应用建立良好的基础设施, 后续的开发就会变得容易而快速.这些基础设施包括: 1. 线程池的建立与配置: 在 JDK 并发库的基础上建立适合于应用的多任务接口和框架: 2. 外部系统服务 ...
- Python 面向对象教程
总结:函数式的应用场景 –> 各个函数之间是独立且无共用的数据. 面向对象三大特性 面向对象的三大特性是指:封装.继承和多态. 一.封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封 ...
- bzoj1689 / P1589 [Usaco2005 Open] Muddy roads 泥泞的路
P1589 [Usaco2005 Open] Muddy roads 泥泞的路 简单的模拟题. 给水坑排个序,蓝后贪心放板子. 注意边界细节. #include<iostream> #in ...
- C 运算优先级口诀
运算优先级口诀: 括号成员第一; //括号运算符[]() 成员运算符. -> 全体单目第二; //所有的单目运算符比如!.~.++. --. +(正). -(负) ...
- 20145303刘俊谦 《网络对抗》Exp9 Web安全基础实践
20145303刘俊谦 <网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入原理,如何防御 SQL注入 就是通过把SQL命令插入到"Web表单递交"或 ...
- 20145336 张子扬 《网络对抗技术》 web安全基础实践
2014536 张子扬<网络攻防>Exp9 Web安全基础实践 实验准备 开启webgoat 1)开启webgoat,打开WebGoat: java -jar webgoat-contai ...
- 定义c/c++全局变量/常量几种方法的区别(转载)
出自:http://www.cnblogs.com/yaozhongxiao/archive/2010/08/08/1795338.html 在讨论全局变量之前我们先要明白几个基本的概念: 1. 编 ...
- 主引导记录MBR的结构和作用
MBR磁盘分区都有一个引导扇区,称为主引导记录,英文简称为MBR.1. MBR的结构MBR扇区位于整个硬盘的第一个扇区:按照C/H/S地址描述,即0柱面〇磁头1扇 区:按照LBA地址描述即0扇区.它是 ...
- LightOJ - 1247 Matrix Game (Nim博弈)题解
题意: 给一个矩阵,每一次一个玩家可以从任意一行中选任意数量的格子并从中拿石头(但最后总数要大于等于1),问你谁赢 思路: 一开始以为只能一行拿一个... 将每一行石子数相加就转化为经典的Nim博弈 ...
- html文件引用本地js文件出现跨域问题的解决方案
在本地做个小demo,很简单,一个html文件,一个js文件,在html文件中通过<script>标签引入js,但是出现了一个意想不到的问题:浏览器报错—— 一番折腾后,终于弄明白了:加载 ...