Rspec: everyday-rspec实操: 第8章DRY. (6个方法,其中3个方法好上手)
Don't Repeat Yourself.
• 把操作步骤提取到辅助模块中;✅
• 通过let复用测试中的实例变量;✅
• 把通用的设置移到共享的情景中;⚠️(不喜欢)
• 在RSpec和rspec-rails提供的匹配器之外,自定义匹配器;⚠️未学习
• 把多个测试用例中的期望合到一个测试用例中;✅aggregate_failure do ..end
• 判断何时可以抽象,何时应该写在测试中。 ❌,老手才会这么做。
8.1 support module
拉下来的分支不知道什么原因又错误。自己在第6章features test又开了一个分支06-text
另外不知道什么原因不能登陆devise. 在从开的06-text可以正常使用。
本节讲的是把登陆代码提取出来建立一个模块,用的时候引用就行了。把模块建立在support文件夹下面。如support/login_support.rb,然后RSpec引入模块,或者手动include需要的地方。
或者使用Devise自带的方法 ,引用模块Warden::Test::Helpers,不过这个不包含进入首页,所以还要visit root_path
visit root_path
8.2 let 实现惰性加载。
在同一个块内,describe, context, before的作用是在example之前加载好数据。
let()方法是在it内调用它声明的变量时,才会加载预构件或固件。
所以:before中的变量用的是实例变量@variable, 而let定义的是变量只在当前块内新建,使用,然后销毁。
React中的let相当于变量可以修改,对应的是const 不可修改。
举例:模型测试task, 建立测试模型和预构件。
rails generate rspec:model task
create spec/models/task_spec.rb
invoke factory_girl
create spec/factories/tasks.rb
...
小结:let还有变形 let! :加载预构件,不是惰性加载了,避免使用let!
可以考虑before块和实例变量,设置直接在需要测试的example中定义测试数据也行。
根据团队需要灵活使用。
8.3 shared context
共享情景,在不同文件中共享let定义的预构件。
我不觉得太好。因为有点过度重构了,不利于他人的维护。本身使用预构件就已经简化了。
let 能让测试数据在多个测试用例中共用,而共享的情景能让相同的设置在多个测试文件中共用。
support/contexts/XXX_setup.rb
RSpec.shared_context "XXX setup" do
#let()... 写let
end
在其他测试中include_context "XXX setup"
8.4 self-define matcher (未看)自定义匹配器
8.5 聚合失败 aggregate failure
Rspec3.3新功能。
约定俗称,在model test and controller test中每个example只放一个expect(), 因此用不到aggregate failure功能。
而在, feature test and request test中每个example可以放多个expect(), 如果前一个expect出错,则停止运行后面的expect测试。
因此需要用到aggregate failure功能让后面的expect()继续测试。
如: spec/controllers/projects_controller_spec.rb
两个expect都会运行。并在命令行窗口输出错误❌。
我们真正聚合的是可能失败的期望,而不是一般性失败。尽管如此,我还是喜欢聚合失败这
个功能,而且经常在测试中使用。
aggregate_failure do..end
8.6 维护测试的可读性
如果测试十分臃肿,可以使用:
单层抽象测试法:
把每一步提取出来,定义为单独的辅助方法,这样在阅读测试时,我们就不用来回变换上下
文。如果以后要添加新期望,也定义为辅助方法,而不直接写在测试用例中。
作者只建议老手这么做(熟练掌握RSpec和Capybara)。因为辅助方法多了可读性也会下降。
Rspec: everyday-rspec实操: 第8章DRY. (6个方法,其中3个方法好上手)的更多相关文章
- Rspec: everyday-rspec实操: 第10章测试其他功能,第11章TDD 第12章总结。
10.测试文件上传 作者推荐的Paperclip,官方维护组已经不推荐使用deprecated. 推荐使用rails自带的 ActiveStorage. Active Storage: 推进文件上传到 ...
- symfony 踩坑之旅 视频实操从第九章开始
1.annotation定义路由 @Route("/**",defaults={"name":"world"},requirements={ ...
- TensorFlow入门实操课程第一章练习笔记
在本练习中,您将尝试构建一个神经网络,让它根据一个简单的公式来预测房屋的价格. 想象一下,如果房子的定价很简单,带一间卧室的房子价格是5万+5万,那么一间卧室的房子要花10万元:两间卧室的房子就要花1 ...
- TensorFlow入门实操课程第一章教程笔记
神经元网络深度学习的起步程序 Hello World 第一个应用程序总是应该从超级简单的东西开始,这样可以看到代码如何产生和运作的整体框架. 就创建神经网络而言,我喜欢使用的例子是一个能够学习两组数字 ...
- Rspec: everyday-rspec实操。5:controller test(了解基础)
第 5 章 控制器测试 5.1基础 rails generate rspec:controller home RSpec.describe HomeController, type: :control ...
- .net基础学java系列(四)Console实操
上一篇文章 .net基础学java系列(三)徘徊反思 本章节没啥营养,请绕路! 看视频,不实操,对于上了年龄的人来说,是记不住的!我已经看了几遍IDEA的教学视频: https://edu.51cto ...
- 【Social listening实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!
本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,作者引出了"外部数据"这一概 ...
- Istio的流量管理(实操一)(istio 系列三)
Istio的流量管理(实操一)(istio 系列三) 使用官方的Bookinfo应用进行测试.涵盖官方文档Traffic Management章节中的请求路由,故障注入,流量迁移,TCP流量迁移,请求 ...
- Istio的流量管理(实操三)
Istio的流量管理(实操三) 涵盖官方文档Traffic Management章节中的egress部分.其中有一小部分问题(已在下文标注)待官方解决. 目录 Istio的流量管理(实操三) 访问外部 ...
随机推荐
- python 采坑总结 调用键盘事件后导致键盘失灵的可能原因
在练习python封装键盘事件的时候,实现一个keyDown和keyUp的功能: @staticmethod def keyDown(keyName): #按下按键 ...
- 修改MySQL数据库中表和表中字段的编码方式的方法
今天向MySQL数据库中的一张表添加含有中文的数据,可是老是出异常,检查程序并没有发现错误,无奈呀,后来重新检查这张表发现表的编码方式为latin1并且原想可以插入中文的字段的编码方式也是latin1 ...
- 在线js调试工具JSbin、jsFiddle
在线js调试工具JSbin.jsFiddle JS Bin - Collaborative JavaScript Debugginghttp://jsbin.com/?html,output这个在线j ...
- Maven的scope的值
Maven的依赖范围 在pom.xml文件中,有个元素是scope,用来表示依赖的范围.之所以会有依赖范围,是因为Maven在编译.测试和运行项目时会各自使用一套classpath,依赖范围就是用来控 ...
- P2260 [清华集训2012]模积和
P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ ...
- 20145206邹京儒MSF基础应用
20145206邹京儒MSF基础应用 一.MS08_067漏洞渗透攻击实践 实验前准备 1.两台虚拟机,其中一台为kali,一台为windows xp sp3(英文版). 2.在VMware中设置两台 ...
- 20145339顿珠 MS08_067漏洞测试
20145339顿珠 Exp5 MS08_067漏洞测试 实验过程 IP地址:192.168.1.104 虚拟机ip:192.168.1.102 在控制台内使用search ms08_067查看相关信 ...
- Python3基础 函数 局部与全局变量同名,各管各的
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- P3901 数列找不同
P3901 数列找不同 题目描述 现有数列 \(A_1,A_2,\cdots,A_N\) ,Q 个询问 \((L_i,R_i)\) , \(A_{Li} ,A_{Li+1},\cdots,A_{Ri} ...
- 三羊献瑞|2015年蓝桥杯B组题解析第三题-fishers
三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉 三 羊 献 瑞 三 羊 生 瑞 气 (如果有对齐问题,可以参看[图1.jpg]) 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写& ...