一個簡單的 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 塊。