Хорошо, теперь я понимаю, что происходит.Этот фрагмент кода делает гораздо больше, чем просто отправка объекта в метод.
bar.map(&:to_sym)
"Метод map из модуля Enumerable, который« смешивается »с классом Array, вызывает блокаргумент один раз для каждого элемента self, в данном случае для массива, и возвращает новый массив, содержащий значения, возвращаемые блоком. Однако в этом случае у нас нет блока, у нас есть &: capitalize .....Когда к объекту в Ruby добавляется унарный амперсанд, если этот объект не является объектом Proc, интерпретатор пытается преобразовать объект в процесс, вызывая для него to_proc.и отправляет сообщение to_proc по адресу: capitalize, .. "http://swaggadocio.com/post/287689063
http://pragdave.pragprog.com/pragdave/2005/11/symbolto_proc.html
В основном вы пытаетесь проверить, что блок передается в #map, который я надеваюне верю, что вы можете сделать в rspec.По сути, это:
bar.map {|element| element.to_sym}
Я бы также сказал, что этот тест во многом зависит от деталей реализации #foo, что делает тест хрупким, поскольку код внутри метода часто изменяется при рефакторинге.,Вместо этого вы должны проверить, что метод возвращает правильное значение.
describe '#foo' do
it 'should convert to array of symbols' do
bar = %w(test1 test2)
foo(bar).should == [:test1 , :test2]
end
end