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
を返すようになりました。