RSpecの期待値
RSpec::Expectationsを使用すると、例でオブジェクトの期待される結果を表現することができます。
expect(account.balance).to eq(Money.new(37.42, :USD))
インストール
RSpecを使用してrspec-expectationsを使用する場合は、単にrspec gemをインストールし、RubyGemsがrspec-expectationsも一緒にインストールします(rspec-coreとrspec-mocksも):
gem install rspec
main
ブランチで実行したいですか?依存するRSpecリポジトリも含める必要があります。次の内容をGemfile
に追加してください:
%w[rspec-core rspec-expectations rspec-mocks rspec-support].each do |lib|
gem lib, :git => "https://github.com/rspec/#{lib}.git", :branch => 'main'
end
Test::Unit、Minitest、またはCucumberなどの他のツールでrspec-expectationsを使用したい場合は、直接インストールすることもできます:
gem install rspec-expectations
基本的な使用法
以下はrspec-coreを使用した例です:
RSpec.describe Order do
it "sums the prices of the items in its line items" do
order = Order.new
order.add_entry(LineItem.new(:item => Item.new(
:price => Money.new(1.11, :USD)
)))
order.add_entry(LineItem.new(:item => Item.new(
:price => Money.new(2.22, :USD),
:quantity => 2
)))
expect(order.total).to eq(Money.new(5.55, :USD))
end
end
describe
メソッドとit
メソッドはrspec-coreから提供されます。Order
、LineItem
、Item
、Money
クラスは_あなたの_コードから取得します。例の最後の行は期待される結果を表現しています。order.total == Money.new(5.55, :USD)
の場合、例は合格します。そうでない場合は、次のようなメッセージで失敗します:
expected: #<Money @value=5.55 @currency=:USD>
got: #<Money @value=1.11 @currency=:USD>
組み込みのマッチャー
等価性
expect(actual).to eq(expected) # actual == expectedの場合に合格
expect(actual).to eql(expected) # actual.eql?(expected)の場合に合格
expect(actual).not_to eql(not_expected) # not(actual.eql?(expected))の場合に合格