Я хочу заглушить блок testBlock
и напрямую протестировать его внутри. Вот мой класс
class MyClass
def method1
testBlock('parameter') do
my_model.method2
end
end
def testBlock(param)
yield
end
end
А вот и тест
RSpec.describe MyClass do
it 'calls method2' do
allow(subject).to receive(:testBlock) { |&block| [1].each(&block) }
expect(my_model).to receive(:method2)
subject.method1
end
end
{ |&block| [1].each(&block) }
- это всего лишь обходной путь для достижения желаемого поведения, но есть ли лучший способ добиться этого без замены самого блока блоком each
?
Заранее спасибо.
1
Kok A.
28 Июл 2020 в 12:44
1 ответ
Лучший ответ
Замените each
на block.call
или просто удалите аргумент и yield
.
Я предполагаю, что реальная реализация testBlock
более сложна, потому что как есть, просто yield
- это именно то, что вам нужно.
2
Siim Liiser
28 Июл 2020 в 10:03
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.