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

should_receive

should_receiveメッセージの期待値を設定するための古い方法ですが、すべてのオブジェクトに対してグローバルなモンキーパッチを持っています。制約の設定応答の設定に対しても同じフルエントインターフェースをサポートしています。

同様に、負のメッセージ期待値を設定するためにshould_not_receiveを使用することもできます。

背景

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

RSpec.configure do |config|
config.mock_with :rspec do |mocks|
mocks.syntax = :should
end
end

また、以下の内容で ".rspec" という名前のファイルがあるとします:

--require spec_helper

失敗する正のメッセージ期待値

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

RSpec.describe "An unfulfilled message expectation" do
it "triggers a failure" do
dbl = double("Some Collaborator")
dbl.should_receive(:foo)
end
end

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

以下のように失敗するはずです:

  1) An unfulfilled message expectation triggers a failure
Failure/Error: dbl.should_receive(:foo)

(Double "Some Collaborator").foo(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments

成功する正のメッセージ期待値

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

RSpec.describe "A fulfilled message expectation" do
it "passes" do
dbl = double("Some Collaborator")
dbl.should_receive(:foo)
dbl.foo
end
end

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

すべての例が成功するはずです。

失敗する負のメッセージ期待値

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

RSpec.describe "A negative message expectation" do
it "fails when the message is received" do
dbl = double("Some Collaborator").as_null_object
dbl.should_not_receive(:foo)
dbl.foo
end
end

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

以下のように失敗するはずです:

  1) A negative message expectation fails when the message is received
Failure/Error: dbl.foo

(Double "Some Collaborator").foo(no args)
expected: 0 times with any arguments
received: 1 time

成功する負のメッセージ期待値

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

RSpec.describe "A negative message expectation" do
it "passes if the message is never received" do
dbl = double("Some Collaborator").as_null_object
dbl.should_not_receive(:foo)
end
end

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

すべての例が成功するはずです。