Using Capybara Outside of Testing Env with a Fake

I question if I’m using Capybara outside the scope of it’s design, though I’ve come this far so I thought I’d ask. At the highest level I need my application in production to:

  • go to a few external links and fill in forms for the user

As an example, a form has:

  • First Name
  • Age

I’ve got a Sidekiq worker that fills in that information like so:

session = Capybara::Session.new(:selenium)
session.visit(third_party_url)
session.fill_in "First Name", with: name
session.fill_in "Age", with: age
session.click_on "Submit"

This works just as I need it to. The problem is I have not found a way to write a test for this, though I’ve tried endlessly.

I have faked the third_party_url following this awesome guide here. The problem is, session.visit(third_party_url) isn’t triggering a get request to my fake, it’s skipping right over it. What I don’t understand is if I replace session.visit(third_party_url) with a Net:HTTP.get(third_party_url) I get right to my fake. I’ve looked at the capybara source and it looks like it’s just making a simple get request here

Currently my test looks like this:

require 'rails_helper'

describe FormWorker do
  it 'fills in a form' do
    SyncWorker.new.perform("Tom", "18")

    expect(user.forms_filled.count).to eq 1
  end
end

Instead what happens is I run the test and Firefox pops up with a 422 error. I’m looking for feedback both on my implementation and testing strategies and really open to any suggestions. Thank you!

Glancing at this quickly, I wonder if you want something like GitHub - thoughtbot/capybara_discoball: Spin up an external server just for Capybara (we use this on many of our apps).

If you’re on our Aspiring Professional plan, you can see us using it in the Upcase app here: https://github.com/thoughtbot/upcase/blob/master/spec/support/fake_stripe.rb