オリジナルの実装を呼び出す
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
を実行すると、
すべての例がパスするはずです。