rspecrspec入门


备注

RSpec是一个BDD工具,用于指定和测试Ruby程序。它主要用于指定和测试类和方法,即用于单元测试。

rspec gem只是一个元宝石,它带来了RSpec的三个部分。这三个部分也是构建此文档的一种方式。

  • rspec的芯提供的结构化和运行测试RSpec的的方式:所述rspec命令行可执行的describecontextit的方法,共享的例子等,这在被记录在RSpec的核心主题
  • rspec的期许提供的RSpec的支持,预期测试结果:在expect / to预期的语法和RSpec内置的匹配器。 (它还提供了弃用should期望语法)。它是在记录中的RSpec期望话题
  • rspec-mocks提供RSpec对测试双精度的支持: doubleallowexpectreceivehave_received等。它在RSpec Mocks主题中有记录

还有rspec-rails gem,它扩展了RSpec,支持测试Rails应用程序中使用的类的类型,并支持编写从用户的角度测试应用程序的功能规范(验收测试)。

有关RSpec和rspec-rails的官方文档,请访问: https//www.relishapp.com/rspec

一个简单的RSpec示例

在greeter.rb中(无论你的项目在哪里):

class Greeter
  def greet
    "Hello, world!"
  end
end
 

在spec / greeter_spec.rb中:

require_relative '../greeter.rb'

RSpec.describe Greeter do
  describe '#greet' do
    it "says hello" do
      expect(Greeter.new.greet).to eq("Hello, world!")
    end
  end
end
 

所以我们的文件结构如下:

$ tree .
.
├── greeter.rb
└── spec
    └── greeter_spec.rb

1 directory, 2 files
 

产量

$rspec greeter_spec.rb
Finished in 0.00063 seconds (files took 0.06514 seconds to load)
1 example, 0 failures
 

在RSpec术语中,文件是Greeter 的“规范”, it 块是“示例”。 expect 的线是期望。如果满足期望,则没有任何反应并且测试通过。如果不是,则测试失败。

此示例还显示可以嵌套describe 块,在这种情况下,传达greet 方法是Greet 类的一部分。 #greet# 只是一个约定,表明greet 是一个实例方法(与类方法的'。'相反)。 RSpec根本不解释字符串,因此您可以使用不同的字符串或省略完全describe 块。

安装RSpec

安装RSpec gem的最常用方法是使用Bundler 。将此行添加到应用程序的Gemfile

gem 'rspec'
 

然后执行bundle 来安装依赖项:

$ bundle
 

或者,您可以手动安装gem:

$ gem install rspec
 

安装gem后,运行以下命令:

rspec --init
 

这将为您的测试创建一个spec 文件夹,以及以下配置文件:

  • 一个spec 目录,用于放置spec文件
  • 带有默认配置选项的spec/spec_helper.rb 文件
  • 带有默认命令行标志的.rspec 文件