引用链接: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基本语法的更多相关文章

  1. 【转】iOS开发工具系列(按功能分)

    http://www.cocoachina.com/newbie/basic/2014/0417/8187.html 这是我们多篇iOS开发工具系列篇中的一篇,此前的文章比如:那些不能错过的Xcode ...

  2. iOS 开发常用的一些工具

    http://www.itjhwd.com/ios-tool/ 通用工具 HomeBrew:OS X上非常出色的包管理工具. 源码控制 Git:分布式版本控制系统和源码管理系统,其优点是:快和简单易用 ...

  3. 32款iOS开发插件和工具介绍[效率]

    插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过!   1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络 ...

  4. Selenium WebDriver + Grid2 + RSpec之旅(一)----准备篇

    Selenium WebDriver + Grid2 + RSpec之旅(一)             ----准备篇 前言 在Web 2.0 应用中,在浏览器种类盛行的时代,我们在测试过程中不仅要模 ...

  5. Rspec: everyday-rspec实操。FactoryBot预构件 (rspec-expectations gem 查看匹配器) 1-4章

    总文档连接: RSpec.info/documentation/ 包括core, expectiation,rails , mock, 点击最新版本,然后右上角搜索class, method. 第3章 ...

  6. Ruby之Rspec的报错解决

    #enconding:utf-8 require 'selenium-webdriver' require 'rspec' describe "baidu main page" d ...

  7. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  9. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

随机推荐

  1. Android中EditTex焦点设置和弹不弹出输入法的问题(转)

    今天编程碰到了一个问题:有一款平板,打开一个有EditText的Activity会默认弹出输入法.为了解决这个问题就深入研究了下android中焦点Focus和弹出输入法的问题.在网上看了些例子都不够 ...

  2. JavaScript中对象的属性

    在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的. 属性类型 JavaScript中有三种不同类型的属性:命名数据属性(named data properties) ...

  3. C语言学习笔记--单引号和双引号

    (1)C 语言中单引号用来表示字符字面量(是个数值)被编译为对应的 ASCII 码 (2)C 语言中双引号用来表示字符串字面量(是个指针)被编译为对应的内存地址 例如:'a'表示字符字面量(97),在 ...

  4. cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客

    cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客 Cadence Allegro16.5详细安装具体的步骤 1.下载SPB16.5下来后,点setup.exe,先安装第一项 ...

  5. 在Visual Studio开发的项目中引用GAC中的dll

    Open the windows Run dialog (Windows Key + r) Type C:\Windows\assembly\gac_msil. This is some sort o ...

  6. 28.【转载】挖洞技巧:APP手势密码绕过思路总结

    说到APP手势密码绕过的问题,大家可能有些从来没接触过,或者接触过,但是思路也就停留在那几个点上,这里我总结了我这1年来白帽子生涯当中所挖掘的关于这方面的思路,有些是网上已经有的,有些是我自己不断摸索 ...

  7. 1.3 DVWA亲测sql注入漏洞

    LOW等级   我们先输入1 我们加上一个单引号,页面报错 我们看一下源代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input ...

  8. Linux下查看文件编码,文件编码格式转换和文件名编码转换

    linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编 ...

  9. VR中运动控制器的传送系统

    创建一个VRPawn 新建一个BluePrint,父类选择Pawn,我们命名为VRPawn,打开它. 添加一个Scene命名为CameraRoot 在CameraRoot节点下添加一个Camera 在 ...

  10. windows下编译Boost库

    下载源码 boost_1_66_0.7z 生成编译工具 D:\Project\boost_1_66_0> bootstrap.bat 配置Python环境变量(使用VS2017自带的32位pyt ...