メインコンテンツまでスキップ

オリジナルの実装を呼び出す

and_call_original を使用して、通常どおりの部分的なダブルの応答を作成します。これは、応答に干渉せずにメッセージを期待する場合に便利です。また、with を使用して、ほとんどの引数に対するデフォルトの応答を設定し、それを特定の引数に対してオーバーライドすることもできます。

注意: and_call_original は部分的なダブルのみサポートされており、通常のテストダブルにはオリジナルの実装がありません。

背景

以下の内容で "lib/calculator.rb" という名前のファイルがあるとします:

class Calculator
def self.add(x, y)
x + y
end
end

and_call_original は部分的なダブルを通常どおりに応答させます

以下の内容で "spec/and_call_original_spec.rb" という名前のファイルがあるとします:

require 'calculator'

RSpec.describe "and_call_original" do
it "responds as it normally would" do
expect(Calculator).to receive(:add).and_call_original
expect(Calculator.add(2, 3)).to eq(5)
end
end

rspec spec/and_call_original_spec.rb を実行すると、

すべての例がパスするはずです。

and_call_original は特定の引数に対してオーバーライドできるデフォルトの応答を設定できます

以下の内容で "spec/and_call_original_spec.rb" という名前のファイルがあるとします:

require 'calculator'

RSpec.describe "and_call_original" do
it "can be overridden for specific arguments using #with" do
allow(Calculator).to receive(:add).and_call_original
allow(Calculator).to receive(:add).with(2, 3).and_return(-5)

expect(Calculator.add(2, 2)).to eq(4)
expect(Calculator.add(2, 3)).to eq(-5)
end
end

rspec spec/and_call_original_spec.rb を実行すると、

すべての例がパスするはずです。