一个简单的 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 术语中,文件是 Greeterspec,而 it 块是示例。与 expect 的线是一个期望。如果满足期望,则没有任何反应并且测试通过。如果不是,则测试失败。

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