teamcapybara--capybara/spec/rspec_spec.rb

128 lines
3.8 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'capybara/rspec' do
context 'Feature', type: :feature do
it 'should include Capybara in rspec' do
visit('/foo')
expect(page.body).to include('Another World')
end
it 'should include RSpec matcher proxies' do
expect(self.class.ancestors).to include Capybara::RSpecMatcherProxies
end
context 'resetting session' do
it 'sets a cookie in one example...' do
visit('/set_cookie')
expect(page.body).to include('Cookie set to test_cookie')
end
it '...then it is not available in the next' do
visit('/get_cookie')
expect(page.body).not_to include('test_cookie')
end
end
context 'setting the current driver' do
it 'sets the current driver in one example...' do
Capybara.current_driver = :selenium
end
it '...then it has returned to the default in the next example' do
expect(Capybara.current_driver).to eq(:rack_test)
end
end
it 'switches to the javascript driver when giving it as metadata', js: true do
expect(Capybara.current_driver).to eq(Capybara.javascript_driver)
end
it 'switches to the given driver when giving it as metadata', driver: :culerity do
expect(Capybara.current_driver).to eq(:culerity)
end
context '#all' do
it 'allows access to the Capybara finder' do
visit('/with_html')
found = all(:css, 'h2') { |element| element[:class] == 'head' }
expect(found.size).to eq(5)
end
it 'allows access to the RSpec matcher' do
visit('/with_html')
strings = %w[test1 test2]
expect(strings).to all(be_a(String))
end
end
context '#within' do
it 'allows access to the Capybara scoper' do
visit('/with_html')
expect do
within(:css, '#does_not_exist') { click_link 'Go to simple' }
end.to raise_error(Capybara::ElementNotFound)
end
it 'allows access to the RSpec matcher' do
visit('/with_html')
# This reads terribly, but must call #within
expect(find(:css, 'span.number').text.to_i).to within(1).of(41)
end
end
end
context 'Type: Other', type: :other do
context 'when RSpec::Matchers is included after Capybara::DSL' do
before do
class DSLMatchersTest
include Capybara::DSL
include RSpec::Matchers
end
@test_class_instance = DSLMatchersTest.new
end
context '#all' do
it 'allows access to the Capybara finder' do
@test_class_instance.visit('/with_html')
expect(@test_class_instance.all(:css, 'h2.head').size).to eq(5)
end
it 'allows access to the RSpec matcher' do
@test_class_instance.visit('/with_html')
strings = %w[test1 test2]
expect(strings).to @test_class_instance.all(be_a(String))
end
end
context '#within' do
it 'allows access to the Capybara scoper' do
@test_class_instance.visit('/with_html')
expect do
@test_class_instance.within(:css, '#does_not_exist') { @test_class_instance.click_link 'Go to simple' }
end.to raise_error(Capybara::ElementNotFound)
end
it 'allows access to the RSpec matcher' do
@test_class_instance.visit('/with_html')
# This reads terribly, but must call #within
expect(@test_class_instance.find(:css, 'span.number').text.to_i).to @test_class_instance.within(1).of(41)
end
end
end
it 'should not include Capybara' do
expect { visit('/') }.to raise_error(NoMethodError)
end
end
end
feature 'Feature DSL' do
scenario 'is pulled in' do
visit('/foo')
expect(page.body).to include('Another World')
end
end