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