Rspec基本语法
引用链接:http://reverocean.iteye.com/blog/1489957
1. describe和context
describe和context方法用来组织相关的行为example。
使用一个字符串作为他们的参数,以及使用一个block来定义其上下文的范围。
写model的spec或者其他的unit test时,可以传一个Ruby类作为describe的第一个参数。Doing so also creates an implicit subject for the examples.
describe Timesheet do
……
end
describe可以嵌套
一般使用:
describe Timesheet do
describe “#test” do
…..
end
end
这样的方式(注意第一个describe的参数是一个类,第二个describe参数是以#开始)这个表示测试Timesheet类下面的test方法)
2. let(:name) {expression}
let方法简单的使用后面的block创建memoized attributes.换句话说就是为后面的测试准备数据,跟before里的代码一样的,但是比before里的代码效果更好。
memozied的意思是let后面关联的block只执行一次,然后会缓存该变量,提高执行效率。
Lazy,有需要才会运算,并且是Memoized
相较于before(:each)增加执行速度
不需要用instance variable放before
增加可读性
let!则是非lazy
3. before和after
和setup、teardown方法类似
Before and after code can be inserted in any describe or context
blocks, and by default the execute for each it block that shares their
scope.
4. it
it方法使用一个描述和block。一个it就是一个测试,最好一个it一个期望
As mentioned, the idea is to complete the thought that was started in the describe method, so that it foms a complete sentence.
5. specify
specify是it方法的别名,但是他可以使用不同的结构来增加可读性。
describe BlogPost do
set(:blog_post) {blog_post = BlogPost.new}
specify {blog_post.should_not be_published}
end
生成的RSpecDoc如下:
BlogPost
- should not be published
6. expect
expect 用来改变一个值或者抛出一个异常。后面接change来表示要达到的值,使用raise_error(异常类)来表示会抛出一个异常。
expect {
BlogPost.create :title => “Hello”
}.to change {BlogPost.count}.by(1)
希望在expect块里做完之后,BlogPost.count的值要改为1
改变值的例子
describe Order do
let(:order) {order = Order.create}
describe "#ship!” do
context “with paid” do
it "should update status to shipping" do
expect {
order.ship!
}.to change { order.status }.from(“new”).to(“ship”)
end
end
end
这里改变值使用的from和to,这样就会在执行expect块之前检查order.status的值是不是new,并且会在执行之后检查是不是”ship”值
抛出异常的例子
describe Order do
let(:order) {order = Order.create}
describe "#ship!” do
context “with paid” do
it "should raise NotPaidError" do
expect {
order.paid? = flase
order.ship!
}.to raise_error(NotPaidError)
end
end
end
这里表示执行完except块之后会抛出一个NotPaidError异常。
7. pending
可以使用pending来列出打算要写的测试
使用it函数不传block给他也是pending的意思,也可以在block离调用pending
可以在before里写pending
8. should和should_not
Rspec mixes them into the base Ruby Object class at runtime so that
they are available on all objects.They expect to receive Matcher
objects, generated using Rspec expectation syntax
receiver.should be_true
receiver.should be_false
receiver.should be_nil
检查型别、方法
receiver.should be_a_kind_of(Array)
receiver.should be_an_instance_of(Array)
receiver.should responsed_to(:foo)
检查Array、Hash
receiver.should have_key(:foo)
receiver.should include(4)
receiver.should have(3).items
任何be_开头
receiver.should be_empty
receiver.should be_blank
receiver.should be_admin
should == 是万能的
Rspec的Matcher很多,也可以自己写
9. Implicit Subject和Explicit Subject
使用subject可省略receiver
10. its
its可以省略receiver的方法调用
describe Order do
subject { Order.new}
its(:status) {should == “New”}
end
Rspec基本语法的更多相关文章
- 【转】iOS开发工具系列(按功能分)
http://www.cocoachina.com/newbie/basic/2014/0417/8187.html 这是我们多篇iOS开发工具系列篇中的一篇,此前的文章比如:那些不能错过的Xcode ...
- iOS 开发常用的一些工具
http://www.itjhwd.com/ios-tool/ 通用工具 HomeBrew:OS X上非常出色的包管理工具. 源码控制 Git:分布式版本控制系统和源码管理系统,其优点是:快和简单易用 ...
- 32款iOS开发插件和工具介绍[效率]
插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络 ...
- Selenium WebDriver + Grid2 + RSpec之旅(一)----准备篇
Selenium WebDriver + Grid2 + RSpec之旅(一) ----准备篇 前言 在Web 2.0 应用中,在浏览器种类盛行的时代,我们在测试过程中不仅要模 ...
- Rspec: everyday-rspec实操。FactoryBot预构件 (rspec-expectations gem 查看匹配器) 1-4章
总文档连接: RSpec.info/documentation/ 包括core, expectiation,rails , mock, 点击最新版本,然后右上角搜索class, method. 第3章 ...
- Ruby之Rspec的报错解决
#enconding:utf-8 require 'selenium-webdriver' require 'rspec' describe "baidu main page" d ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
随机推荐
- pythoon_interview_redit
easy/intermediate What are Python decorators and how would you use them?How would you setup many pro ...
- [bzoj3670] [NOI2014] [lg2375] 动物园
nxt数组为KMP的next数组num[i]储存了i前面可以匹配的串的个数.先在KMP求nxt中顺便求出num最后再找到对于i的最大的前后缀不重叠的可匹配的j,ans*=(num[j]+1)%1000 ...
- 使用 EntityFramework后把一个对象序列化成json字符串引起循环引用的问题
先看一个T4模板生成的model实体类 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:卷猫 链接:http://anneke.cn/ArticleInfo/Detial ...
- linux命令-任务计划-cron
任务计划,有时间规律的执行某些事情. 查看任务计划:crontab -l 指定用户:crontab -l -u 用户名 该用户没有任务计划. 自定义任务计划 进入一个操作和vim类似的界面 用空格分 ...
- MyBatis 学习总结(1)
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,几乎消除了所有的 JDBC 代码和参数的手工设置以及结果集的处理,通过XML(sqlMapConfig)或注解配置数据源和 ...
- 第2天视频 08_androidHelloworld
为什么应用的包名要用公司域名倒写呢?如何区分不同的安卓应用?高版本的应用装了之后会把低版本的应用覆盖掉.如果是不同的应用跟其他应用没关系只要装上去就可以了.区别不同的应用用的比较关键的东西是一个是应用 ...
- 哪个U盘启动工具能安装红帽系统,
安装红帽子,不要使用windows系统下的PE启动盘,两者引导方式不一样,不通用的.正确的方法是网上下载红帽子的ISO镜像文件后,用UltraISO这个工具写入优盘或者光盘,得到的系统盘才可以启动电脑 ...
- String与字符数组
public class Example { static String str = new String("good"); static char[] ch = {'a','b' ...
- 2.HTTP头注入
重新认识被人遗忘的HTTP头注入 前言 注入类漏洞经久不衰,多年保持在owasp Top 10的首位.今天就聊聊那些被人遗忘的http头注入.用简单的实际代码进行演示,让每个人更深刻的去认识该漏洞. ...
- Ubuntu14跑DSO
按照https://github.com/JakobEngel/dso上的说明,make -j4的时候出现一下错误: /home/zhao/dso/src/FullSystem/CoarseIniti ...