RSpec:Stub私有方法

23t*_*tux 24 ruby rspec ruby-on-rails rspec2 ruby-on-rails-3

我尝试使用RSpec2测试一个类,它有一些私有方法,这些方法是从一些公共方法调用的.我测试公共方法

@foo.should_receive(:start_training).exactly(2).times
Run Code Online (Sandbox Code Playgroud)

如果他们被召唤和多久 我的问题是,这种方法不适用于私有方法.那么,有没有什么办法可以使用某物像@foo.send(:private_method)结合should_receive?还是其他任何语法?

Jus*_*ken 25

should_receive(:method)是否有效:方法是公共的还是私有的...


Sin*_*ary 13

您可以使用allow_any_instance_of方法来存根或模拟任何类的实例,例如,您使用某些方法class命名Foo,而private不是像这样做

allow_any_instance_of(Foo).to receive(:private_method) do
  #do something
end 
Run Code Online (Sandbox Code Playgroud)

万一你module也有,你可以做这样的事情

allow_any_instance_of(Module::Foo).to receive(:private_method) do
  #do something
end
Run Code Online (Sandbox Code Playgroud)

您可以allow_any_instance_of()官方文档中找到有关方法的更多详细信息

  • 使用“allow_any_instance_of”被认为是一种不好的做法,请参阅https://www.rubydoc.info/gems/rubocop-rspec/1.6.0/RuboCop/Cop/RSpec/AnyInstance (3认同)