26
votes

I"m using capybara for my integration/acceptance tests. They're in /spec/requests/ folder. Now I have a few helper methods that I use during acceptance tests. One example is register_user which looks like this

def register_user(user)
  visit home_page
  fill_in 'user_name', :with => user.username
  fill_in 'password', :with => user.password
  click_button 'sign_up_button'
end

I want to use this method in several different acceptance tests (they're in different files). What's the best way to include this? I've tried putting it in spec/support/ but it hasn't been working for me. After spending some time on it I realized I don't even know if it's a good way of doing it so I figured I'd ask here.

Note: I am using rails 3, spork and rspec.

3

3 Answers

39
votes

Put your helper to the spec/support folder and do something like this:

spec/support/:

module YourHelper
  def register_user(user)
    visit home_page
    fill_in 'user_name', :with => user.username
    fill_in 'password', :with => user.password
    click_button 'sign_up_button'
  end
end

RSpec.configure do |config|
  config.include YourHelper, :type => :request
end
16
votes

I used the given solution by @VasiliyErmolovich, but I changed the type to make it work:

config.include YourHelper, :type => :feature
0
votes

Explicit way with ruby

Using include:

# spec/support/your_helper.rb
class YourHelper
  def register_user(user)
    visit home_page
    fill_in 'user_name', :with => user.username
    fill_in 'password', :with => user.password
    click_button 'sign_up_button'
  end
end

describe MyRegistration do
  include YourHelper

  it 'registers an user' do
    expect(register_user(user)).to be_truthy
  end
end