Integration Testing with Rspec, Capybara and Fabricator - Sorcery/sorcery GitHub Wiki
If you want to write integration tests with Sorcery, Capybara, and Fabricator you will need to login using Capybara.
Create a test helper module
Somewhere in your spec directory add the following module. spec/support/authentication.rb
is a good choice. The user_sessions_url
is the generated path to your UserSessionsController.
module Sorcery
module TestHelpers
module Rails
module Integration
def login_user_post(user, password)
page.driver.post(user_sessions_url, { username: user, password: password})
end
end
end
end
end
Include the helper module
In spec/rails_helper.rb
, include the test helper module.
RSpec.configure do |config|
config.include Sorcery::TestHelpers::Rails::Controller, type: :controller
config.include Sorcery::TestHelpers::Rails::Request, type: :request
config.include Sorcery::TestHelpers::Rails::Integration, type: :feature
end
Create a user fabrication
Create a user_fabricator.rb file in your spec/fabricators
directory.
Fabricator(:user, :class_name => "User") do
id { sequence }
username { "admin" }
password { "admin" }
display_name { "Admin Boom"}
admin { true }
email { "[email protected]" }
salt { "asdasdastr4325234324sdfds" }
crypted_password { Sorcery::CryptoProviders::BCrypt.encrypt("secret",
"asdasdastr4325234324sdfds") }
end
Write your test
You can now invoke your helper module to login a user with Capybara. current_user
will be available in your controller code when visiting pages.
describe "Integration Test" do
let!(:user) { Fabricate(:user) }
before(:each) do
login_user_post("admin", "admin")
end
context "when I visit a page" do
it "show awesome things" do
#Test stuff
end
end
end