3. http://www.thinknetica.com
Rack Session Access
# spec/support/login_helper.rb
# Devise version
def sign_in(user)
page.set_rack_session(
'warden.user.user.key' =>
User.serialize_into_session(user).unshift("User")
)
end
# Sorcery version
def sign_in(user)
page.set_rack_session(user_id: user.id)
end
3
4. http://www.thinknetica.com
Multiple sessions
scenario "all users see new answer in real-time" do
Capybara.using_session('author') do
sign_in(user)
visit question_path(question)
end
Capybara.using_session('guest') do
visit question_path(question)
end
Capybara.using_session('author') do
page.find("#add_answer_btn").trigger('click')
within "#new_answer_form" do
fill_in 'Body', with: 'test text'
click_on 'Save'
end
expect(page).to have_content "Your answer has been successfully created"
expect(page).to have_content "test text"
end
Capybara.using_session('guest') do
expect(page).to have_content "test text"
end
end
4
5. http://www.thinknetica.com
Test server access
scenario "creates answer" do
page.find("#add_answer_btn").trigger('click')
within "#new_answer_form" do
fill_in 'Body', with: 'test text'
click_on 'Save'
end
visit_server
expect(page).to have_content "Your answer has been
successfully created"
expect(page).to have_content "test text"
end
5
6. http://www.thinknetica.com
Test server access
# spec/support/acceptance_helper.rb
def visit_server(user: nil, wait: 2, path: '/')
url = "http://#{Capybara.server_host}:#{Capybara.server_port}"
if user.present?
url += "/dev/log_in/#{user.id}?redirect_to=#{path}"
else
url += path
end
p "Visit server on: #{url}"
Launchy.open(url)
if wait == 0
p "Type any key to continue..."
$stdin.gets
p "Done."
else
sleep wait
end
end
6