1
0
Fork 0
mirror of https://github.com/teamcapybara/capybara.git synced 2022-11-09 12:08:07 -05:00
teamcapybara--capybara/spec/dsl_spec.rb

271 lines
8.3 KiB
Ruby
Raw Normal View History

2016-03-07 19:52:19 -05:00
# frozen_string_literal: true
2018-02-28 19:11:41 -05:00
require 'spec_helper'
2009-11-16 16:02:16 -05:00
require 'capybara/dsl'
2009-11-12 11:51:31 -05:00
class TestClass
include Capybara::DSL
end
2018-07-10 17:18:39 -04:00
Capybara::SpecHelper.run_specs TestClass.new, 'DSL', capybara_skip: %i[
js modals screenshot frames windows send_keys server hover about_scheme psc download css
] do |example|
case example.metadata[:full_description]
when /doesn't raise exception on a nil current_url$/,
/#refute_selector should warn not to use$/
2018-07-10 17:18:39 -04:00
skip 'Only makes sense when there is a real driver'
end
end
RSpec.describe Capybara::DSL do
2009-11-12 11:51:31 -05:00
after do
Capybara.session_name = nil
2009-11-16 16:02:16 -05:00
Capybara.default_driver = nil
2012-08-20 18:23:48 -04:00
Capybara.javascript_driver = nil
2009-11-16 16:02:16 -05:00
Capybara.use_default_driver
Capybara.app = TestApp
2009-11-12 11:51:31 -05:00
end
describe '#default_driver' do
2018-07-10 17:18:39 -04:00
it 'should default to rack_test' do
expect(Capybara.default_driver).to eq(:rack_test)
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should be changeable' do
2009-11-16 16:02:16 -05:00
Capybara.default_driver = :culerity
expect(Capybara.default_driver).to eq(:culerity)
2009-11-12 11:51:31 -05:00
end
end
describe '#current_driver' do
2018-07-10 17:18:39 -04:00
it 'should default to the default driver' do
expect(Capybara.current_driver).to eq(:rack_test)
2009-11-16 16:02:16 -05:00
Capybara.default_driver = :culerity
expect(Capybara.current_driver).to eq(:culerity)
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should be changeable' do
2009-11-16 16:02:16 -05:00
Capybara.current_driver = :culerity
expect(Capybara.current_driver).to eq(:culerity)
2009-11-12 11:51:31 -05:00
end
end
2009-11-16 14:11:42 -05:00
describe '#javascript_driver' do
2018-07-10 17:18:39 -04:00
it 'should default to selenium' do
expect(Capybara.javascript_driver).to eq(:selenium)
2009-11-16 14:11:42 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should be changeable' do
2009-11-16 16:02:16 -05:00
Capybara.javascript_driver = :culerity
expect(Capybara.javascript_driver).to eq(:culerity)
2009-11-16 14:11:42 -05:00
end
end
2009-11-12 11:51:31 -05:00
describe '#use_default_driver' do
2018-07-10 17:18:39 -04:00
it 'should restore the default driver' do
2009-11-16 16:02:16 -05:00
Capybara.current_driver = :culerity
Capybara.use_default_driver
expect(Capybara.current_driver).to eq(:rack_test)
2009-11-12 11:51:31 -05:00
end
end
2010-11-07 09:37:33 -05:00
describe '#using_driver' do
before do
expect(Capybara.current_driver).not_to eq(:selenium) # rubocop:disable RSpec/ExpectInHook
2010-11-07 09:37:33 -05:00
end
it 'should set the driver using Capybara.current_driver=' do
driver = nil
Capybara.using_driver(:selenium) { driver = Capybara.current_driver }
expect(driver).to eq(:selenium)
2010-11-07 09:37:33 -05:00
end
it 'should return the driver to default if it has not been changed' do
Capybara.using_driver(:selenium) do
expect(Capybara.current_driver).to eq(:selenium)
end
expect(Capybara.current_driver).to eq(Capybara.default_driver)
end
it 'should reset the driver even if an exception occurs' do
driver_before_block = Capybara.current_driver
2010-11-07 09:37:33 -05:00
begin
2018-07-10 17:18:39 -04:00
Capybara.using_driver(:selenium) { raise 'ohnoes!' }
rescue Exception # rubocop:disable Lint/RescueException,Lint/HandleExceptions
2010-11-07 09:37:33 -05:00
end
expect(Capybara.current_driver).to eq(driver_before_block)
2010-11-07 09:37:33 -05:00
end
it 'should return the driver to what it was previously' do
Capybara.current_driver = :selenium
Capybara.using_driver(:culerity) do
Capybara.using_driver(:rack_test) do
expect(Capybara.current_driver).to eq(:rack_test)
end
expect(Capybara.current_driver).to eq(:culerity)
end
expect(Capybara.current_driver).to eq(:selenium)
end
2010-11-07 09:37:33 -05:00
it 'should yield the passed block' do
called = false
Capybara.using_driver(:selenium) { called = true }
expect(called).to eq(true)
2010-11-07 09:37:33 -05:00
end
end
describe '#using_wait_time' do
before do
@previous_wait_time = Capybara.default_max_wait_time
end
after do
Capybara.default_max_wait_time = @previous_wait_time
end
2018-07-10 17:18:39 -04:00
it 'should switch the wait time and switch it back' do
in_block = nil
Capybara.using_wait_time 6 do
in_block = Capybara.default_max_wait_time
end
expect(in_block).to eq(6)
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
end
2018-07-10 17:18:39 -04:00
it 'should ensure wait time is reset' do
expect do
Capybara.using_wait_time 6 do
2018-07-10 17:18:39 -04:00
raise 'hell'
end
2018-07-10 17:18:39 -04:00
end.to raise_error(RuntimeError, 'hell')
expect(Capybara.default_max_wait_time).to eq(@previous_wait_time)
end
end
2009-11-12 11:51:31 -05:00
describe '#app' do
2018-07-10 17:18:39 -04:00
it 'should be changeable' do
Capybara.app = 'foobar'
expect(Capybara.app).to eq('foobar')
2009-11-12 11:51:31 -05:00
end
end
describe '#current_session' do
2018-07-10 17:18:39 -04:00
it 'should choose a session object of the current driver type' do
expect(Capybara.current_session).to be_a(Capybara::Session)
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should use #app as the application' do
2009-11-16 16:02:16 -05:00
Capybara.app = proc {}
expect(Capybara.current_session.app).to eq(Capybara.app)
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should change with the current driver' do
expect(Capybara.current_session.mode).to eq(:rack_test)
Capybara.current_driver = :selenium
expect(Capybara.current_session.mode).to eq(:selenium)
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should be persistent even across driver changes' do
2009-11-16 16:02:16 -05:00
object_id = Capybara.current_session.object_id
expect(Capybara.current_session.object_id).to eq(object_id)
Capybara.current_driver = :selenium
expect(Capybara.current_session.mode).to eq(:selenium)
expect(Capybara.current_session.object_id).not_to eq(object_id)
2009-11-12 11:51:31 -05:00
2009-11-16 16:02:16 -05:00
Capybara.current_driver = :rack_test
expect(Capybara.current_session.object_id).to eq(object_id)
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should change when changing application' do
2009-11-16 16:02:16 -05:00
object_id = Capybara.current_session.object_id
expect(Capybara.current_session.object_id).to eq(object_id)
2009-11-16 16:02:16 -05:00
Capybara.app = proc {}
expect(Capybara.current_session.object_id).not_to eq(object_id)
expect(Capybara.current_session.app).to eq(Capybara.app)
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should change when the session name changes' do
object_id = Capybara.current_session.object_id
Capybara.session_name = :administrator
expect(Capybara.session_name).to eq(:administrator)
expect(Capybara.current_session.object_id).not_to eq(object_id)
Capybara.session_name = :default
expect(Capybara.session_name).to eq(:default)
expect(Capybara.current_session.object_id).to eq(object_id)
end
end
2018-07-10 17:18:39 -04:00
describe '#using_session' do
it 'should change the session name for the duration of the block' do
expect(Capybara.session_name).to eq(:default)
Capybara.using_session(:administrator) do
expect(Capybara.session_name).to eq(:administrator)
end
expect(Capybara.session_name).to eq(:default)
end
2018-07-10 17:18:39 -04:00
it 'should reset the session to the default, even if an exception occurs' do
begin
Capybara.using_session(:raise) do
raise
end
2018-07-10 17:18:39 -04:00
rescue Exception # rubocop:disable Lint/RescueException,Lint/HandleExceptions
end
expect(Capybara.session_name).to eq(:default)
end
2018-07-10 17:18:39 -04:00
it 'should yield the passed block' do
called = false
Capybara.using_session(:administrator) { called = true }
expect(called).to eq(true)
end
2015-08-13 13:44:59 -04:00
2018-07-10 17:18:39 -04:00
it 'should be nestable' do
2015-08-13 13:44:59 -04:00
Capybara.using_session(:outer) do
expect(Capybara.session_name).to eq(:outer)
Capybara.using_session(:inner) do
expect(Capybara.session_name).to eq(:inner)
end
expect(Capybara.session_name).to eq(:outer)
end
expect(Capybara.session_name).to eq(:default)
end
end
2018-07-10 17:18:39 -04:00
describe '#session_name' do
it 'should default to :default' do
expect(Capybara.session_name).to eq(:default)
end
end
2009-11-12 11:51:31 -05:00
describe 'the DSL' do
before do
@session = Class.new { include Capybara::DSL }.new
2009-11-12 11:51:31 -05:00
end
2018-07-10 17:18:39 -04:00
it 'should be possible to include it in another class' do
@session.visit('/with_html')
@session.click_link('ullamco')
expect(@session.body).to include('Another World')
2009-11-12 12:09:29 -05:00
end
it "should provide a 'page' shortcut for more expressive tests" do
@session.page.visit('/with_html')
@session.page.click_link('ullamco')
expect(@session.page.body).to include('Another World')
end
it "should provide an 'using_session' shortcut" do
allow(Capybara).to receive(:using_session)
@session.using_session(:name)
expect(Capybara).to have_received(:using_session).with(:name)
end
it "should provide a 'using_wait_time' shortcut" do
allow(Capybara).to receive(:using_wait_time)
@session.using_wait_time(6)
expect(Capybara).to have_received(:using_wait_time).with(6)
end
2009-11-12 11:51:31 -05:00
end
end