mirror of
https://github.com/teamcapybara/capybara.git
synced 2022-11-09 12:08:07 -05:00
157 lines
4.2 KiB
Ruby
157 lines
4.2 KiB
Ruby
require 'spec_helper'
|
|
|
|
require 'capybara/dsl'
|
|
|
|
describe Capybara do
|
|
|
|
before do
|
|
Capybara.app = TestApp
|
|
end
|
|
|
|
after do
|
|
Capybara.default_driver = nil
|
|
Capybara.use_default_driver
|
|
end
|
|
|
|
describe '#default_driver' do
|
|
it "should default to rack_test" do
|
|
Capybara.default_driver.should == :rack_test
|
|
end
|
|
|
|
it "should be changeable" do
|
|
Capybara.default_driver = :culerity
|
|
Capybara.default_driver.should == :culerity
|
|
end
|
|
end
|
|
|
|
describe '#current_driver' do
|
|
it "should default to the default driver" do
|
|
Capybara.current_driver.should == :rack_test
|
|
Capybara.default_driver = :culerity
|
|
Capybara.current_driver.should == :culerity
|
|
end
|
|
|
|
it "should be changeable" do
|
|
Capybara.current_driver = :culerity
|
|
Capybara.current_driver.should == :culerity
|
|
end
|
|
end
|
|
|
|
describe '#javascript_driver' do
|
|
it "should default to selenium" do
|
|
Capybara.javascript_driver.should == :selenium
|
|
end
|
|
|
|
it "should be changeable" do
|
|
Capybara.javascript_driver = :culerity
|
|
Capybara.javascript_driver.should == :culerity
|
|
end
|
|
end
|
|
|
|
describe '#use_default_driver' do
|
|
it "should restore the default driver" do
|
|
Capybara.current_driver = :culerity
|
|
Capybara.use_default_driver
|
|
Capybara.current_driver.should == :rack_test
|
|
end
|
|
end
|
|
|
|
describe '#using_driver' do
|
|
before do
|
|
Capybara.current_driver.should_not == :selenium
|
|
end
|
|
|
|
it 'should set the driver using Capybara.current_driver=' do
|
|
driver = nil
|
|
Capybara.using_driver(:selenium) { driver = Capybara.current_driver }
|
|
driver.should == :selenium
|
|
end
|
|
|
|
it 'should reset the driver using Capybara.use_default_driver, even if an exception occurs' do
|
|
begin
|
|
Capybara.using_driver(:selenium) { raise "ohnoes!" }
|
|
rescue Exception
|
|
end
|
|
Capybara.current_driver.should == Capybara.default_driver
|
|
end
|
|
|
|
it 'should yield the passed block' do
|
|
called = false
|
|
Capybara.using_driver(:selenium) { called = true }
|
|
called.should == true
|
|
end
|
|
end
|
|
|
|
describe '#app' do
|
|
it "should be changeable" do
|
|
Capybara.app = "foobar"
|
|
Capybara.app.should == 'foobar'
|
|
end
|
|
end
|
|
|
|
describe '#current_session' do
|
|
it "should choose a session object of the current driver type" do
|
|
Capybara.current_session.should be_a(Capybara::Session)
|
|
end
|
|
|
|
it "should use #app as the application" do
|
|
Capybara.app = proc {}
|
|
Capybara.current_session.app.should == Capybara.app
|
|
end
|
|
|
|
it "should change with the current driver" do
|
|
Capybara.current_session.mode.should == :rack_test
|
|
Capybara.current_driver = :selenium
|
|
Capybara.current_session.mode.should == :selenium
|
|
end
|
|
|
|
it "should be persistent even across driver changes" do
|
|
object_id = Capybara.current_session.object_id
|
|
Capybara.current_session.object_id.should == object_id
|
|
Capybara.current_driver = :selenium
|
|
Capybara.current_session.mode.should == :selenium
|
|
Capybara.current_session.object_id.should_not == object_id
|
|
|
|
Capybara.current_driver = :rack_test
|
|
Capybara.current_session.object_id.should == object_id
|
|
end
|
|
|
|
it "should change when changing application" do
|
|
object_id = Capybara.current_session.object_id
|
|
Capybara.current_session.object_id.should == object_id
|
|
Capybara.app = proc {}
|
|
Capybara.current_session.object_id.should_not == object_id
|
|
Capybara.current_session.app.should == Capybara.app
|
|
end
|
|
end
|
|
|
|
describe 'the DSL' do
|
|
before do
|
|
@session = Capybara
|
|
end
|
|
|
|
it_should_behave_like "session"
|
|
it_should_behave_like "session without javascript support"
|
|
|
|
it "should be possible to include it in another class" do
|
|
klass = Class.new do
|
|
include Capybara
|
|
end
|
|
foo = klass.new
|
|
foo.visit('/with_html')
|
|
foo.click_link('ullamco')
|
|
foo.body.should include('Another World')
|
|
end
|
|
|
|
it "should provide a 'page' shortcut for more expressive tests" do
|
|
klass = Class.new do
|
|
include Capybara
|
|
end
|
|
foo = klass.new
|
|
foo.page.visit('/with_html')
|
|
foo.page.click_link('ullamco')
|
|
foo.page.body.should include('Another World')
|
|
end
|
|
end
|
|
|
|
end
|