Posted at

[RSpec] allow、receive、and_return メソッドを使って特定のメソッドをスタブ化する

More than 5 years have passed since last update.

RSpec でスタブ化する方法を検索すると、今は推奨されていない stub メソッドを使う方法はよく見つかるのですが、allow メソッドを使う方法を紹介する記事があまり見つからなかったので具体例を投稿しておきます。

テスト対象のクラスです。


japan.rb

class Japan

def get_capital
"Tokyo"
end
end

そしてテストコードです。下記のテストは成功します。


japan_spec.rb

require_relative "japan.rb"

describe "Japan.get_capital" do
it "returns Saitama" do
japan = Japan.new
allow(japan).to receive(:get_capital).and_return("Saitama")
expect(japan.get_capital).to eq("Saitama")
end
end


allow メソッドの引数にスタブ化したいメソッドを持つインスタンスを、receive メソッドの引数にスタブ化したいメソッド名のシンボルを、and_return メソッドにスタブ化されたメソッドに返してほしい返り値を渡します。

get_capital メソッドは、本来は Tokyo を返しますが、前述のスタブ化によって Saitama を返すようになりました。