这篇博客是关于RSpec的入门知识的,因为最近工作需要,所以找到了一些适合新手的入门材料,为了学习和归纳,这里做个简单翻译,有需要的可以去看看原文,省略了一些不必要的东西,也加入了一些自己的看法。
参考地址:使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」
开始
RSpec很难吧,是不是特么的什么都不懂,关于这样的评论是经常能看到的。确实,因为RSpec独特的结构,以及有很多功能,[看起来很难]这样的情绪是很能理解的。
但是,不仅仅只是RSpec,不管什么样的框架也是一样的,习惯了之后,都能够很顺利的写的,实际上个人认为[RSpec是很方便的]。 (这是原作者这么认为的,我到现在也是经常一脸懵逼…)
这里总结的是,原作者认为最低限度的需要了解的RSpec的文章结构,已经经常被使用的功能做一个总结。
本文的文章结构和功能如下
- describe / it / expect 的作用
- describe的嵌套
- context的使用方法
- let / let!/ subject的使用方法
- shared_examples的使用方法
- shared_context的使用方法
- pending 和 skip的使用区分
关于其他的当然还有后续,如果有需要请参考原文,比如说mock,CapybaraのDSL等等。
阅读适合的对象
- RSpec读起来真的头痛的初心者
- 已经使用过很多次了,但是RSpec还是不知道是啥的经验者
- 有着Ruby关系的项目,需要写RSpec测试的人员,但是仍有困惑的从其他测试平台的经验者
Ruby和Rails的版本
- RSpec 3.10
- Ruby 2.1.3
这次的博文,没有用rails,纯Ruby的代码。
关于RSpec的安装环境和方法
这里原文当然也有粘贴方法,但是我这里就不详细讲了,需要的可以查询下其他资料。
第一步
理解describe/it/expect的作用
最简单的RSpec是这样的记述的:
|
|
describe是test的分组的宣言,在这里‘是有关于四则运算的test’的声明。
it 是test中是以example为单位的作用。it do …end中,expecting(和预期一致的值比较)如果全部pass的话,那么这个example就是pass(通过了)。
|
|
这样的记述,就是一个expecting,并且
expect(1+1).to eq 2这样的意义是[1+1的结果期待是2]的测试。
把should变成expect的理由
在RSpec的2.10以前,should是下面的方法的:
|
|
然后,现在不使用should,而是使用expect的理由是,should是黑魔法,如果使用的话会有发生问题的可能,如果有想看详细的理由的,请看:
参考地址:不用should的原因
复数的example
在describe中,可以写复数的example(it do …end):
那么如果实现测试的话,会有一下的结果
|
|
复数的expecting
在一个example中,可以有很多的expecting:
但是,如果这么使用的话的,途中test失败的时候,那么之前的expect是通过了还是没有通过是不能够预想的(就是说,如果中间一个expect出错了,那么是前几个的错还是后几个的错事不知道的)。
所以,原则上[1个example上只有一个expect],这样的写的测试具有很好的保守性。
describe的嵌套
多少个describe都是可以写的,嵌套是可以的。
基本的作用就是[把test分组化],如下面的group可以这么写:
这样的话,能够让读代码的人很好的理解。
context和before会更加的便利
使用更有实践的例子来说明,让我们来看看context和before的使用方法
这是User类的声明,
当12岁及以下,是中文。
当age是13岁及以上,是英文。
那么对应的RSpec就是:
在这里的时候,要注意describe可以接class,也可以接文字列:
describe中,instance method的一般的写法是’#methodname’
context的条件组
```