Rspec: everyday-rspec实操: 第9章 快速编写测试,编写快速的测试。
Make it work, make it right, make it fast.
- 测试运行的时间。应用和测试组件的增长,速度会越来越慢,目标是保持代码的readable, maintainable.
- 如何快速编写清晰的测试
具体:
RSpec 为精简代码提供的简练句法;✅找有用的看了看
善用代码编辑器,减少输入量⚠️ 未学
使用驭件和桩件,避免潜在的性能瓶颈; ✅简单了解。
使用标签过滤速度慢的测试; ✅ ,基本学习
提升测试组件整体速度的技术。 ✅ gem ParallelTests
9.1 RSpec 的简练句法
subject和let看起来做了一样的工作,区别是subject对象是测试的焦点,let是辅助。(敏捷开发一书。)
subject用于声明测试的对象。
9.3 mock, stub
驭件(替身)是用来替代真实对象的测试对象,也被称为测试替身(test double)。驭件可以替代我们之前使用预构件或纯 Ruby 创建的对象,但是不改动数据库中的数据,所以速度快一些。
桩件是对指定对象方法的重写,返回一个预设的值。也就是说,桩件虽是个虚假方法,但调用时
会返回一个真实的值供测试使用。桩件经常用来重写方法的默认功能,特别是在频繁操作数据库
或网络密集型交互中。 allow().to receive().and_return()
反继承的min-in 方法:
Provides a delegate class method to easily expose contained objects' public methods as your own. 授权receiver使用某个对象的公共方法,当成自己的方法来用
# object be delegated to use user's name
to: 目标target
prefex: true的话,方法前面加上target的name,然后加_隔开。
如果不想大量使用驭件和桩件也没关系,简单的数据用 Ruby 对象,稍微复杂的就用
Factory Bot。桩件很容易带来麻烦。
只要测试不太慢,或者测试的数据无法复现(例如第三方 API 或其他 Web 服务,下一章会详细介
绍),恰当的使用 Ruby 对象和预构件完全可以满足需求。
9.4 tag
https://relishapp.com/rspec/rspec-core/docs/command-line/tag-option#filter-examples-with-non-existent-tag假设我们在为应用添加一个新功能,在这个过程中要编写几个模型测试,一个控制器测试和一个集成测
试。我们可不想在开发过程中运行整个测试组件,而单独运行每个测试又略显麻烦。此时便可以使用
RSpec 的标签选项。借助标签,我们可以标记要运行的测试,其余的则跳过。
为此,经常使用名为 focus 的标签。在想运行的测试中添加这个标签:
it "processes a credit card", focus: true do
# 测试用例中的步骤
end
然后在命令行中指定 focus 标签,只运行标记的测试: $ bin/rspec --tag focus
标签名可以自定义为" name: 'value' " 或者 “ name: true ”
如果bin/rspec --tag xxx 不存在这个标签,则只检索测试,并反馈0example,0failures。
9.4 删除非必要测试
如果某个测试的目的达到了,未来不再需要了,放心地删除吧。如果以后还会用到,但是不想每次都运
行,可以跳过那个测试:
it "loads a lot of data" do
skip "no longer necessary"
# 测试用例的代码
# 不会运行
end
9.6 并行运行测试
我见过要运行 30 分钟的测试,我还听说过比这更慢的测试。运行速度慢的测试组件可以
使用 Parallel-
Tests gem 并行运行。
9.7 高手通过剔除Rails框架的部分或全部组件提高速度。
Rspec: everyday-rspec实操: 第9章 快速编写测试,编写快速的测试。的更多相关文章
- Rspec: everyday-rspec实操: 第8章DRY. (6个方法,其中3个方法好上手)
Don't Repeat Yourself. • 把操作步骤提取到辅助模块中;✅ • 通过let复用测试中的实例变量;✅ • 把通用的设置移到共享的情景中;⚠️(不喜欢) • 在RSpec和rspec ...
- 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实操。FactoryBot预构件 (rspec-expectations gem 查看匹配器) 1-4章
总文档连接: RSpec.info/documentation/ 包括core, expectiation,rails , mock, 点击最新版本,然后右上角搜索class, method. 第3章 ...
- 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实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!
本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,作者引出了"外部数据"这一概 ...
随机推荐
- Oracle等待事件之等待事件详解
一. 等待事件的相关知识:1.1 等待事件主要可以分为两类:即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候, ...
- talib 中文文档(七):Overlap Studies Functions
Overlap Studies Functions 重叠指标 BBANDS - Bollinger Bands 函数名:BBANDS 名称: 布林线指标 简介:其利用统计原理,求出股价的标准差及其信赖 ...
- python中的下划线(私有变量)
Python用下划线作为变量前缀和后缀指定特殊变量. - "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量:不能用"from xx ...
- OC如何跳到系统设置里的各种设置界面
当 iOS系统版本 <= iOS7时 , 只能跳转到 系统设置页面 ,楼主试了下,非真机是没有任何效果的 当iOS系统版本 < iOS 10.0 时 NSURL *url= [NSURL ...
- SAP GUI常用快捷键
F1:帮助 F2:双击.比如TC行的双击,LIST行的双击等 F3:后退(Back),后退按钮 Shift+F3:退出(Exit),退出按钮 F4:搜索帮助 F8:执行 F10:菜单 F12:取消(C ...
- java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V
环境: Spark2.1.0 .Hadoop-2.7.5 代码运行系统:Win 7在运行Spark程序写出文件(savaAsTextFile)的时候,我遇到了这个错误: // :: ERROR U ...
- ELK日志分析工具
一.ELK介绍 1.1 elasticsearch 1.1.1 elasticsearch介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎 ...
- 装饰器的修复wraps,偏函数partial 以及chain
将被装饰的函数的一些属性值赋值给 装饰器函数,最终让属性的显示更符合我们的直觉. from functools import wraps def wapper(func): @wraps(func) ...
- Mybatis使用generatedKey在插入数据时返回自增id始终为1,自增id实际返回到原对象当中的问题排查
今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的自增主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都 ...
- 项目中使用protobuf 3.0
protocol buffer从3.0 原生的compiler支持c++,Java,Python,Go,Ruby,JavaNano,JavaScript,Objective-C,C#,PHP这篇文章作 ...