Ответ 1
should_receive (: method) работает ли: метод является общедоступным или закрытым...
Я пытаюсь проверить класс с RSpec2, который имеет некоторые частные методы, которые вызываются из некоторых общедоступных методов. Я тестирую публичные методы с помощью
@foo.should_receive(:start_training).exactly(2).times
если они вызываются и как часто. Моя проблема заключается в том, что этот подход не работает с частными методами. Итак, есть ли способ использовать sth как @foo.send(:private_method)
в сочетании с should_receive
? Или любой другой синтаксис?
should_receive (: method) работает ли: метод является общедоступным или закрытым...
Вы можете использовать метод allow_any_instance_of
для заглушения или издевательства над любым экземпляром класса
например. у вас есть class
с именем Foo
с некоторыми методами private
, чем вы можете сделать что-то вроде этого
allow_any_instance_of(Foo).to receive(:private_method) do
#do something
end
Если у вас есть module
, вы можете сделать что-то вроде этого
allow_any_instance_of(Module::Foo).to receive(:private_method) do
#do something
end
Более подробную информацию о методе allow_any_instance_of()
можно найти в Официальная документация
Почему вы хотите протестировать частные методы? Они частные по причине; для предотвращения доступа к внешним вызовам. Тестирование общедоступных методов, которые полагаются на частные методы, должно быть достаточным.
Плохая новость: вы не можете заглушить приватный метод
хороший вариант: вы можете сделать свой метод protected
, а затем заглушить его обычным способом
allow_any_instance_of(described_class).to receive(:my_protected_method_name).and_return("foo_bar")