Операторы case используют ===
для целей равенства регистра, и в этом случае Foo
является получателем, а не аргументом.например,
case attr
when Foo then attr.foo
end
Сравнивает attr
с Foo
как Foo === attr
, а не наоборот.
Таким образом, вы можете изменить свой тест на
it 'make some business logic here' do
allow(Foo).to receive(:===).with(foo).and_return(true)
expect { subject }.to be_truthy
end
Таким образом, при оценке вашего оператора case он будет следовать по пути when Foo
, поскольку Foo === attr
будет иметь значение true из-за заглушки.