unstub
の使用方法
unstub
は、メソッドスタブを削除し、メソッドスタブをクリーンアップするためのものです。これにより、例の最後に実行されるクリーンアップを待つのではなく、メソッドスタブを早期にクリーンアップすることができます。新しいモンキーパッチのない構文には直接の相当するものはありませんが、ほとんどの場合、and_call_original
を使用することで同じ動作を実現できます。違いは、obj.unstub(:foo)
は foo
メソッドスタブを完全にクリーンアップするのに対して、allow(obj).to receive(:foo).and_call_original
はメソッドの呼び出しを引き続き監視します(スパイ を使用している場合に重 要です)。これは、caller
を使用して何かしらの処理を行う場合に、追加の RSpec スタックフレームが含まれるため、メソッドの動作に影響を与える可能性があります。
背景
以下の内容で "spec/spec_helper.rb" という名前のファイルがあるとします:
RSpec.configure do |config|
config.mock_with :rspec do |mocks|
mocks.syntax = :should
end
end
また、以下の内容で ".rspec" という名前のファイルがあるとします:
--require spec_helper
メソッドのアンスタブ化
以下の内容で "spec/unstub_spec.rb" という名前のファイルがあるとします:
RSpec.describe "Unstubbing a method" do
it "restores the original behavior" do
string = "hello world"
string.stub(:reverse) { "hello dlrow" }
expect {
string.unstub(:reverse)
}.to change { string.reverse }.from("hello dlrow").to("dlrow olleh")
end
end
rspec spec/unstub_spec.rb
を実行すると、
すべての例がパスするはずです。