Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Tree: c3c8a9753e
Fetching contributors…

Cannot retrieve contributors at this time

189 lines (163 sloc) 7.25 kB
require 'spec_helper'
module RSpec
module Mocks
describe "a Mock expectation with multiple return values and no specified count" do
before(:each) do
@mock = RSpec::Mocks::Mock.new("mock")
@return_values = ["1",2,Object.new]
@mock.should_receive(:message).and_return(@return_values[0],@return_values[1],@return_values[2])
end
it "returns values in order to consecutive calls" do
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
@mock.message.should eq @return_values[2]
@mock.rspec_verify
end
it "complains when there are too few calls" do
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 2 times|
)
end
it "complains when there are too many calls" do
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
@mock.message.should eq @return_values[2]
@mock.message.should eq @return_values[2]
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 4 times|
)
end
it "doesn't complain when there are too many calls but method is stubbed too" do
@mock.stub(:message).and_return :stub_result
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
@mock.message.should eq @return_values[2]
@mock.message.should eq :stub_result
expect { @mock.rspec_verify }.to_not raise_error(RSpec::Mocks::MockExpectationError)
end
end
describe "a Mock expectation with multiple return values with a specified count equal to the number of values" do
before(:each) do
@mock = RSpec::Mocks::Mock.new("mock")
@return_values = ["1",2,Object.new]
@mock.should_receive(:message).exactly(3).times.and_return(@return_values[0],@return_values[1],@return_values[2])
end
it "returns values in order to consecutive calls" do
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
@mock.message.should eq @return_values[2]
@mock.rspec_verify
end
it "complains when there are too few calls" do
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 2 times|
)
end
it "complains when there are too many calls" do
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
@mock.message.should eq @return_values[2]
@mock.message.should eq @return_values[2]
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 4 times|
)
end
it "complains when there are too many calls and method is stubbed too" do
@mock.stub(:message).and_return :stub_result
@mock.message.should eq @return_values[0]
@mock.message.should eq @return_values[1]
@mock.message.should eq @return_values[2]
@mock.message.should eq :stub_result
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 4 times|
)
end
end
describe "a Mock expectation with multiple return values specifying at_least less than the number of values" do
before(:each) do
@mock = RSpec::Mocks::Mock.new("mock")
@mock.should_receive(:message).at_least(:twice).with(no_args).and_return(11, 22)
end
it "uses the last return value for subsequent calls" do
@mock.message.should equal(11)
@mock.message.should equal(22)
@mock.message.should equal(22)
@mock.rspec_verify
end
it "fails when called less than the specified number" do
@mock.message.should equal(11)
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(no args)\n expected: 2 times\n received: 1 time|
)
end
context "when method is stubbed too" do
before { @mock.stub(:message).and_return :stub_result }
it "uses the stub return value for subsequent calls" do
@mock.message.should equal(11)
@mock.message.should equal(22)
@mock.message.should equal(:stub_result)
@mock.rspec_verify
end
it "fails when called less than the specified number" do
@mock.message.should equal(11)
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(no args)\n expected: 2 times\n received: 1 time|
)
end
end
end
describe "a Mock expectation with multiple return values with a specified count larger than the number of values" do
before(:each) do
@mock = RSpec::Mocks::Mock.new("mock")
@mock.should_receive(:message).exactly(3).times.and_return(11, 22)
end
it "uses the last return value for subsequent calls" do
@mock.message.should equal(11)
@mock.message.should equal(22)
@mock.message.should equal(22)
@mock.rspec_verify
end
it "fails when called less than the specified number" do
@mock.message.should equal(11)
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 1 time|
)
end
it "fails when called greater than the specified number" do
@mock.message.should equal(11)
@mock.message.should equal(22)
@mock.message.should equal(22)
@mock.message.should equal(22)
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 4 times|
)
end
context "when method is stubbed too" do
before { @mock.stub(:message).and_return :stub_result }
it "fails when called greater than the specified number" do
@mock.message.should equal(11)
@mock.message.should equal(22)
@mock.message.should equal(22)
@mock.message.should equal(:stub_result)
expect { @mock.rspec_verify }.to raise_error(
RSpec::Mocks::MockExpectationError,
%Q|(Mock "mock").message(any args)\n expected: 3 times\n received: 4 times|
)
end
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.