我有一个静态方法正在对远程服务器进行HTTP POST。
我想测试这个方法是否在需要时使用正确的参数调用,但我也想阻止它实际运行,因此在测试时它不会执行实际的HTTP请求。
如何将该方法全局存根,以便我不必在每个测试用例中都这样做以防止它实际运行? 如果这样做,我如何为测试实际方法的特定测试用例取消存储?
答案 0 :(得分:7)
如果您只想在所有规范中存根该方法,并检查它在调用时是否接收到正确的参数(假设它们在每种情况下都相同),您只需向{{1}添加存根即可在spec_helper
块中:
before(:each)
如果使用您指定的参数调用存根,则会失败。请注意,您也可以使用RSpec.configure do |config|
...
config.before(:each) do
SomeClass.stub(:some_static_method).with(...).and_return(...)
end
...
end
作为@appneadiving建议,但是您必须使用should_receive
来调用它,以确保它不会失败,如果您不调用它,那基本上是与使用存根相同(参见this discussion)。
另一种方法是使用webmock gem将请求存根到给定的URL。使用这种方法你不必(必然)需要存根你的方法,你可以让它像往常一样运行,确保每当它试图用你指定的参数访问服务器时,它将获得给定的响应。
要在整个规范中使用网络模式,您必须在any_number_of_times
中添加一行,如上所述,调用spec_helper
方法,例如:
stub_request
希望有所帮助。