Моя интерпретация этого заключается не столько в том, что должно быть точно одно утверждение/вызов должно
для каждой спецификации, но должно быть только один бит поведения, протестированный для каждой спецификации, так например
it 'should do foo and bar' do
subject.do_foo.should be_true
subject.do_bar.should be_true
end
это плохо - вы одновременно указываете 2 разных поведения.
с другой стороны, если ваши 2 утверждения просто проверяют разные аспекты одной вещи, тогда я в порядке с этим, например
it 'should return a prime integer' do
result = subject.do_x
result.should be_a(Integer)
result.foo.should be_prime
end
Для меня не было бы лишнего смысла иметь одну спецификацию, которая проверяет, что она возвращает целое число и отдельное, которое возвращает премьер.
Конечно, в этом случае совпадение be_prime может легко выполнить обе эти проверки - возможно, правильное правило состоит в том, что несколько утверждений в порядке, если вы могли бы разумно сократить их до 1 с помощью специального совпадения (действительно ли это действительно стоит зависит от вашей ситуации)
В вашем конкретном случае можно утверждать, что в игре есть два поведения: один изменяет статус, а другой мутирует коллекцию ideas
. Я бы пересмотрел ваши спецификации, чтобы сказать, что должен сделать метод выпуска -
it 'should change the status to available'
it 'should remove the idea from the claimants ideas'
В настоящий момент эти вещи всегда происходят одновременно, но я бы сказал, что они являются отдельными поведением - вы можете легко представить себе систему, в которой несколько человек могут претендовать/выпустить идею, а статус изменяется только тогда, когда последний человек выпускает идею.