RSpec: каждый раз указывать несколько вызовов метода с различным аргументом
В rspec (1.2.9), каков правильный способ указать, что каждый раз каждый раз будет получаться несколько вызовов метода с другим аргументом?
Я спрашиваю из-за этого запутанного результата:
describe Object do
it "passes, as expected" do
foo = mock('foo')
foo.should_receive(:bar).once.ordered.with(1)
foo.should_receive(:bar).once.ordered.with(2)
foo.bar(1)
foo.bar(2)
end
it "fails, as expected" do
foo = mock('foo')
foo.should_receive(:bar).once.ordered.with(1) # => Mock "foo" expected :bar with (1) once, but received it twice
foo.should_receive(:bar).once.ordered.with(2)
foo.bar(1)
foo.bar(1)
foo.bar(2)
end
it "fails, as expected" do
foo = mock('foo')
foo.should_receive(:bar).once.ordered.with(1)
foo.should_receive(:bar).once.ordered.with(2)
foo.bar(2) # => Mock "foo" received :bar out of order
foo.bar(1)
end
it "fails, as expected, but with an unexpected message" do
foo = mock('foo')
foo.should_receive(:bar).once.ordered.with(1)
foo.should_receive(:bar).once.ordered.with(2)
foo.bar(1)
foo.bar(999) # => Mock "foo" received :bar with unexpected arguments
# => expected: (1)
# => got (999)
end
end
Я ожидал, что последнее сообщение об ошибке будет "ожидаемым: (2)", а не "ожидается (1)". Я использовал rspec неправильно?
Ответы
Ответ 1
Аналогично question. Рекомендуемое решение - вызвать as_null_object
, чтобы избежать путаницы сообщений. Итак:
describe Object do
it "fails, as expected, (using null object)" do
foo = mock('foo').as_null_object
foo.should_receive(:bar).once.ordered.with(1)
foo.should_receive(:bar).once.ordered.with(2)
foo.bar(1)
foo.bar(999) # => Mock "foo" expected :bar with (2) once, but received it 0 times
end
end
Выход не совпадает с вашим вторым случаем (т.е. "ожидаемый 2, но получил 999" ), но он показывает, что ожидания не были выполнены.