Ruby on rails RSpec:如何测试静态方法是否被调用,但阻止它实际运行?

Ruby on rails RSpec:如何测试静态方法是否被调用,但阻止它实际运行?,ruby-on-rails,rspec,Ruby On Rails,Rspec,我有一个静态方法,它向远程服务器发送HTTP POST 我想测试这个方法是否在需要时使用正确的参数调用,但我还想阻止它实际运行,这样它在测试时就不会执行实际的HTTP请求 我怎样才能全局地存根该方法,这样我就不必在每个测试用例中都这样做来阻止它实际运行? 如果这样做,我如何为测试实际方法的特定测试用例取消发布它呢?如果您只想在所有规范中存根该方法,并检查它在每次调用时是否收到正确的参数(假设它们在每种情况下都相同),那么您可以在之前在中的规范帮助程序中添加存根(:每个)块: RSpec.conf

我有一个静态方法,它向远程服务器发送HTTP POST

我想测试这个方法是否在需要时使用正确的参数调用,但我还想阻止它实际运行,这样它在测试时就不会执行实际的HTTP请求

我怎样才能全局地存根该方法,这样我就不必在每个测试用例中都这样做来阻止它实际运行?
如果这样做,我如何为测试实际方法的特定测试用例取消发布它呢?

如果您只想在所有规范中存根该方法,并检查它在每次调用时是否收到正确的参数(假设它们在每种情况下都相同),那么您可以在
之前在
中的
规范帮助程序中添加存根(:每个)
块:

RSpec.configure do |config|
  ...
  config.before(:each) do
    SomeClass.stub(:some_static_method).with(...).and_return(...)
  end
  ...
end
如果使用您指定的参数以外的任何参数调用存根,则该操作将失败。请注意,您也可以按照@appneadiving的建议使用
should\u receive
,但您必须使用
any\u number\u次
来调用它,以确保不调用它时不会失败,这与使用存根基本相同(请参阅)

另一种方法是使用gem将请求存根到给定的URL。使用这种方法,您不(一定)需要存根您的方法,您可以让它像往常一样运行,并确保每当它尝试使用您指定的参数访问服务器时,它都会得到给定的响应

要在整个规范中使用webmock,您必须在
spec\u helper
中添加一行,如上面的一行,调用
stub\u request
方法,例如:

stub_request(:any, "www.example.com").with(:query => { :a => "b"}).to_return(...)

希望对您有所帮助。

您需要的是接收
吗?如何防止它实际运行和访问网络?如果stub中使用了
任何实例
,这也适用于非静态方法stub新语法:
允许(SomeClass)。接收(:some\u static\u method)
更多信息:。