`
reverocean
  • 浏览: 196020 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

RSpec 基本语法

 
阅读更多
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
11.
分享到:
评论

相关推荐

    the rspec book.pdf

    这本书不仅涵盖了Rspec的基本用法,还深入探讨了高级特性和最佳实践,旨在帮助开发者实现更高效、更有信心的软件开发。 Rspec的核心理念是通过描述代码应有的行为来驱动其设计,而不是单纯地验证其功能。这种方式...

    RSpec 3.1中文版

    它不仅涵盖了RSpec的安装与基础使用,还包括了在Rails应用中实现TDD的具体方法和技巧,以及如何有效地将RSpec集成到现有的Rails工作流中。通过阅读本书,读者能够掌握如何通过编写测试来驱动Rails应用的开发,从而...

    Pragmatic.The RSpec Book.2010.pdf

    1. **灵活的语法**:RSpec 允许使用自定义匹配器来描述期望的行为,这使得测试代码更加直观。 2. **易于理解**:RSpec 的输出非常人性化,即使是非技术人员也能轻松阅读并理解测试结果。 3. **支持多种环境**:RSpec...

    使用RSpec 测试Rails 程序.pdf

    - **RSpec的新句法**:介绍RSpec中的新语法特性,如`let`、`before`、`after`等,这些可以帮助减少冗余代码。 - **测试数据验证**:使用RSpec提供的匹配器(matchers)来验证模型的数据是否满足预期的约束条件。 - *...

    The.RSpec.Book

    #### 知识点三:RSpec 的基本结构 - **描述(Describe)**:用来描述类或模块的行为。 - **上下文(Context)**:用于组织测试用例,可以嵌套以表示更复杂的场景。 - **预期(Expect)**:用来指定期望的结果或行为...

    The Rspec Book -- BDD methodology

    - **基础知识**:首先掌握RSpec的基本语法和用法,包括如何编写简单的测试用例。 - **高级技巧**:进一步学习RSpec提供的高级特性,如模拟对象、共享上下文等。 - **最佳实践**:了解并遵循RSpec社区推荐的最佳实践...

    BDD开发之rspec和cucumber

    - **RSpec基础知识**:介绍RSpec的基本概念、安装配置、核心特性和最佳实践。 - **Cucumber入门**:解释Cucumber的工作原理、Gherkin语言的使用方法以及如何编写有效的行为特征。 - **集成RSpec与Cucumber**:探讨...

    The RSpec book

    #### 三、RSpec 的基本语法 - **Describe/Context**: 用来描述类或一组相关的测试。 - 例如:`describe MyClass do` 或 `context "when the user is logged in" do` - **It/Should**: 用来描述单个测试案例。 - ...

    rspec-style-guide:编写规范的最佳实践!

    1. **RSpec 基础**: RSpec 是一个行为驱动开发(BDD)的测试框架,它允许开发者以自然语言描述代码的行为,使得测试代码更加易读。在 `rspec-style-guide` 中,你将学习如何有效地组织和编写 RSpec 的期望...

    Ruby基础语法使用方法全套讲解,风格讲解指南大全

    在这个"Ruby基础语法使用方法全套讲解,风格讲解指南大全"中,我们将深入探讨Ruby的核心特性,包括变量、数据类型、控制结构、函数、类和模块等基础知识。 1. **变量**:Ruby中的变量分为五种类型:局部变量(以...

    ruby-tdd-dnd:学习RSpec和Ruby

    通过此项目,你不仅可以学习到Ruby的基本语法,还能深入理解TDD和RSpec的使用,这对于提升代码质量和开发效率有着极大的帮助。通过实践,你可以掌握如何编写清晰的测试用例,以及如何有效地使用RSpec来验证和改进你...

    观众:基于RSpec的Crystal的功能丰富的测试框架

    - **简洁的语法**:Spectator模仿RSpec的语法,允许开发者用类似于`it "should do something"`的语句来定义测试用例,使得测试代码易于理解和维护。 - **断言库**:Spectator提供了丰富的断言方法,如`expect...

    from-zero-to-hero-with-RSpec

    以下我们将详细探讨 RSpec 的核心概念、安装步骤、基本用法以及如何逐步构建一个 TDD 项目。 1. **安装 RSpec** 在开始之前,确保你的系统已经安装了 Ruby 和 Bundler。接下来,通过在项目根目录下运行 `gem ...

    basicmath:这是一个回购,旨在学习有关Rspec和使用基本算术运算的测试驱动开发

    Rspec提供了清晰、易读的语法,使得测试代码如同自然语言一般,增强了代码的可读性和可维护性。 这个名为"basicmath"的回购仓库,其主要目标是教学如何利用Rspec进行测试驱动的开发,同时涉及基本的算术运算。在...

    bookhouse_tdd:使用rspec在Ruby上构建的商店项目

    1. **Ruby**: 了解Ruby的基础语法、面向对象特性、块、闭包、元编程等是理解此项目的关键。 2. **RSpec**: 学习RSpec的基本用法,如`describe`、`it`、`before`、`expect`等关键字,以及如何编写模拟对象(mocks和...

    W6D5-专案:CSS花絮,RSpec作业,TDD专案

    为了完成这个项目,你需要理解并应用上述的CSS技术和测试方法,同时也需要熟悉Ruby编程语言的基本语法和面向对象特性。通过这个项目,你不仅能提升你的技术能力,还能培养良好的编程习惯和思维方式,这对于任何IT...

    dev-pills:跟踪日常学习

    今天我学到了遵循 , 和的实践。 我在Makers Academy训练营过程中学习到的技巧和...测验Chrome开发者工具TDD的伦敦vs芝加哥学校测试系统示例 RSpec和测试Ruby RSpec设置RSpec语法RSpec模拟撬添加:水豚Rubocop脚手架

    Ruby 语法. Ruby 是一种开源的面向对象程序设计的服务器端脚本语言

    #### 四、Ruby 语言基础语法 - **变量声明**:Ruby 不需要显式声明变量类型,直接赋值即可。 - **数据类型**: - **基本类型**:如 Integer、Float、String、Boolean 等。 - **复合类型**:如 Array、Hash 等。 -...

    fee_tracker:RSpec 3的有效测试中的Expense Tracker示例

    1. **基础测试结构** 在RSpec中,测试通常按照“描述-它-示例”的结构组织。例如,我们可以为添加新支出功能创建一个描述: ```ruby describe "ExpenseTracker" do describe "#add_expense" do it "should add a...

    sample_sinatra:Ruby CLI 应用程序通过 Rspec 测试移植到 Sinatra

    3. **CRUD**: 创建(Create)、读取(Read)、更新(Update)和删除(Delete)是数据库操作的基本动作,也是 web 应用处理数据的核心功能。 4. **CLI 应用程序**: 命令行接口应用,用户通过终端输入命令与应用交互...

Global site tag (gtag.js) - Google Analytics