Ravenstine Ravenstine - 10 months ago 50
Ruby Question

How can I block external connections with RSpec & Capybara?

With my Rails project, I would like to write tests non-ideal conditions such as lack of internet connection or timeouts. For example, I am using a gem to contact an API and would like to make sure that I handle the error correctly if there is a connection issue between my app and the external API.

I can do this already by making a fixture with VCR and removing the response from the "cassette". However, this has drawbacks:

  • It has to be done manually.

  • The cassettes can not be gitignored if I am working with a team(which I am).

How can I simply create a block in my RSpec tests that will prevent external connections, simulating the lack of an internet connection?

Ben Ben

I've never tried to do this, but perhaps you could use webmock to stub out all requests.

before do 
  stub_request(:any, /.*/).to_return(body: "errors", status: 422)

More info on stubbing external services.