Since this article was written, version 1.7.0 of WebMock has been released, which includes WebMock.disable! functionality, as well as fixes the problem with selenium-webdriver. So please use that, instead of webmock-disabler.
Recently, one of my projects ran into a problem where our integration tests would intermittently fail with weird timeout errors and complaints about page elements that couldn’t be found.
A little googling revealed that we weren’t the only ones having this problem.
Apparently, WebMock, Selenium, and WebDriver don’t play nicely together, even if you tell WebMock to allow the outgoing connections necessary to drive the browser.
Some Gemfile hacking revealed that it was the mere presence of WebMock that caused the error. If we removed WebMock from our Gemfile, our integration tests ran fine, but then of course all of our tests that actually needed WebMock failed.
At that point, we could have decided to run our integration tests separately from the rest of the tests, but we really liked the idea of having all the tests run in the same VM, to avoid the duplicate VM startup time.
What we really needed was a way to turn WebMock on and off selectively for different types of tests.
With some gnarly monkey patching and offensive use of
alias_method, I have created webmock-disabler, a gem which provides new
WebMock.enable! methods. You can use these methods in individual tests, or on classes of tests as shown in the README.
We’re now able to run our tests that need WebMock in the same VM as those that would otherwise break if we didn’t do