调用原始实现
使用 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/andcalloriginal_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/andcalloriginal_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
时
那么这些示例应该全部通过。