LoginSignup
69
46

More than 5 years have passed since last update.

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

Posted at

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

69
46
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
69
46