Use described_class in specs

This commit is contained in:
Thomas Walpole 2019-07-15 14:49:21 -07:00
parent ed1f5c8d8f
commit 1cfbfea150
11 changed files with 88 additions and 91 deletions

View File

@ -145,9 +145,6 @@ RSpec/MultipleExpectations:
RSpec/ContextWording:
Enabled: false
RSpec/DescribedClass:
Enabled: false
RSpec/NestedGroups:
Enabled: false

View File

@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe Capybara do
describe '.string' do
let :string do
Capybara.string <<-STRING
described_class.string <<-STRING
<html>
<head>
<title>simple_node</title>
@ -52,7 +52,7 @@ RSpec.describe Capybara do
end
it 'allows using custom matchers' do
Capybara.add_selector :lifeform do
described_class.add_selector :lifeform do
xpath { |name| ".//option[contains(.,'#{name}')]" }
end
expect(string).to have_selector(:id, 'page')
@ -62,7 +62,7 @@ RSpec.describe Capybara do
end
it 'allows custom matcher using css' do
Capybara.add_selector :section do
described_class.add_selector :section do
css { |css_class| "section .#{css_class}" }
end
expect(string).to have_selector(:section, 'subsection')
@ -112,13 +112,13 @@ RSpec.describe Capybara do
it 'drops illegal fragments when using gumbo' do
skip 'libxml is less strict than Gumbo' unless Nokogiri.respond_to?(:HTML5)
expect(Capybara.string('<td>1</td>')).not_to have_css('td')
expect(described_class.string('<td>1</td>')).not_to have_css('td')
end
it 'can disable use of gumbo' do
skip "Test doesn't make sense unlesss nokogumbo is loaded" unless Nokogiri.respond_to?(:HTML5)
Capybara.allow_gumbo = false
expect(Capybara.string('<td>1</td>')).to have_css('td')
described_class.allow_gumbo = false
expect(described_class.string('<td>1</td>')).to have_css('td')
end
describe '#title' do

View File

@ -4,20 +4,20 @@ require 'spec_helper'
RSpec.describe Capybara do
describe 'default_max_wait_time' do
before { @previous_default_time = Capybara.default_max_wait_time }
before { @previous_default_time = described_class.default_max_wait_time }
after { Capybara.default_max_wait_time = @previous_default_time } # rubocop:disable RSpec/InstanceVariable
after { described_class.default_max_wait_time = @previous_default_time } # rubocop:disable RSpec/InstanceVariable
it 'should be changeable' do
expect(Capybara.default_max_wait_time).not_to eq(5)
Capybara.default_max_wait_time = 5
expect(Capybara.default_max_wait_time).to eq(5)
expect(described_class.default_max_wait_time).not_to eq(5)
described_class.default_max_wait_time = 5
expect(described_class.default_max_wait_time).to eq(5)
end
end
describe '.register_driver' do
it 'should add a new driver' do
Capybara.register_driver :schmoo do |app|
described_class.register_driver :schmoo do |app|
Capybara::RackTest::Driver.new(app)
end
session = Capybara::Session.new(:schmoo, TestApp)
@ -28,85 +28,85 @@ RSpec.describe Capybara do
describe '.register_server' do
it 'should add a new server' do
Capybara.register_server :blob do |_app, _port, _host|
described_class.register_server :blob do |_app, _port, _host|
# do nothing
end
expect(Capybara.servers).to have_key(:blob)
expect(described_class.servers).to have_key(:blob)
end
end
describe '.server' do
after do
Capybara.server = :default
described_class.server = :default
end
it 'should default to a proc that calls run_default_server' do
mock_app = Object.new
allow(Capybara).to receive(:run_default_server).and_return(true)
Capybara.server.call(mock_app, 8000)
expect(Capybara).to have_received(:run_default_server).with(mock_app, 8000)
allow(described_class).to receive(:run_default_server).and_return(true)
described_class.server.call(mock_app, 8000)
expect(described_class).to have_received(:run_default_server).with(mock_app, 8000)
end
it 'should return a custom server proc' do
server = ->(_app, _port) {}
Capybara.register_server :custom, &server
Capybara.server = :custom
expect(Capybara.server).to eq(server)
described_class.register_server :custom, &server
described_class.server = :custom
expect(described_class.server).to eq(server)
end
it 'should have :webrick registered' do
expect(Capybara.servers[:webrick]).not_to be_nil
expect(described_class.servers[:webrick]).not_to be_nil
end
it 'should have :puma registered' do
expect(Capybara.servers[:puma]).not_to be_nil
expect(described_class.servers[:puma]).not_to be_nil
end
end
describe 'server=' do
after do
Capybara.server = :default
described_class.server = :default
end
it 'accepts a proc' do
server = ->(_app, _port) {}
Capybara.server = server
expect(Capybara.server).to eq server
described_class.server = server
expect(described_class.server).to eq server
end
end
describe 'app_host' do
after do
Capybara.app_host = nil
described_class.app_host = nil
end
it 'should warn if not a valid URL' do
expect { Capybara.app_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
expect { described_class.app_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.app_host should be set to a url/)
end
it 'should not warn if a valid URL' do
expect { Capybara.app_host = 'http://www.example.com' }.not_to raise_error
expect { described_class.app_host = 'http://www.example.com' }.not_to raise_error
end
it 'should not warn if nil' do
expect { Capybara.app_host = nil }.not_to raise_error
expect { described_class.app_host = nil }.not_to raise_error
end
end
describe 'default_host' do
around do |test|
old_default = Capybara.default_host
old_default = described_class.default_host
test.run
Capybara.default_host = old_default
described_class.default_host = old_default
end
it 'should raise if not a valid URL' do
expect { Capybara.default_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
expect { described_class.default_host = 'www.example.com' }.to raise_error(ArgumentError, /Capybara\.default_host should be set to a url/)
end
it 'should not warn if a valid URL' do
expect { Capybara.default_host = 'http://www.example.com' }.not_to raise_error
expect { described_class.default_host = 'http://www.example.com' }.not_to raise_error
end
end
end

View File

@ -4,11 +4,11 @@ require 'spec_helper'
RSpec.describe Capybara::Selector::FilterSet do
after do
Capybara::Selector::FilterSet.remove(:test)
described_class.remove(:test)
end
it 'allows node filters' do
fs = Capybara::Selector::FilterSet.add(:test) do
fs = described_class.add(:test) do
node_filter(:node_test, :boolean) { |_node, _value| true }
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
end
@ -18,7 +18,7 @@ RSpec.describe Capybara::Selector::FilterSet do
end
it 'allows expression filters' do
fs = Capybara::Selector::FilterSet.add(:test) do
fs = described_class.add(:test) do
node_filter(:node_test, :boolean) { |_node, _value| true }
expression_filter(:expression_test, :boolean) { |_expr, _value| true }
end
@ -28,7 +28,7 @@ RSpec.describe Capybara::Selector::FilterSet do
end
it 'allows node filter and expression filter with the same name' do
fs = Capybara::Selector::FilterSet.add(:test) do
fs = described_class.add(:test) do
node_filter(:test, :boolean) { |_node, _value| true }
expression_filter(:test, :boolean) { |_expr, _value| true }
end
@ -37,7 +37,7 @@ RSpec.describe Capybara::Selector::FilterSet do
end
it 'allows `filter` as an alias of `node_filter`' do
fs = Capybara::Selector::FilterSet.add(:test) do
fs = described_class.add(:test) do
filter(:node_test, :boolean) { |_node, _value| true }
end

View File

@ -6,7 +6,7 @@ require 'selenium-webdriver'
RSpec.describe Capybara::Selenium::Driver do
it 'should exit with a non-zero exit status' do
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
browser = Capybara::Selenium::Driver.new(TestApp, options).browser
browser = described_class.new(TestApp, options).browser
expect(browser).to be_truthy
expect(true).to eq(false) # rubocop:disable RSpec/ExpectActual
end

View File

@ -6,7 +6,7 @@ require 'selenium-webdriver'
RSpec.describe Capybara::Selenium::Driver do
it 'should exit with a zero exit status' do
options = { browser: (ENV['SELENIUM_BROWSER'] || :firefox).to_sym }
browser = Capybara::Selenium::Driver.new(TestApp, options).browser
browser = described_class.new(TestApp, options).browser
expect(browser).to be_truthy
expect(true).to eq(true) # rubocop:disable RSpec/ExpectActual
end

View File

@ -155,27 +155,27 @@ RSpec.describe Capybara::RackTest::Driver do
describe ':headers option' do
it 'should always set headers' do
driver = Capybara::RackTest::Driver.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver = described_class.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver.visit('/get_header')
expect(driver.html).to include('foobar')
end
it 'should keep headers on link clicks' do
driver = Capybara::RackTest::Driver.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver = described_class.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver.visit('/header_links')
driver.find_xpath('.//a').first.click
expect(driver.html).to include('foobar')
end
it 'should keep headers on form submit' do
driver = Capybara::RackTest::Driver.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver = described_class.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver.visit('/header_links')
driver.find_xpath('.//input').first.click
expect(driver.html).to include('foobar')
end
it 'should keep headers on redirects' do
driver = Capybara::RackTest::Driver.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver = described_class.new(TestApp, headers: { 'HTTP_FOO' => 'foobar' })
driver.visit('/get_header_via_redirect')
expect(driver.html).to include('foobar')
end
@ -183,7 +183,7 @@ RSpec.describe Capybara::RackTest::Driver do
describe ':follow_redirects option' do
it 'defaults to following redirects' do
driver = Capybara::RackTest::Driver.new(TestApp)
driver = described_class.new(TestApp)
driver.visit('/redirect')
expect(driver.response.header['Location']).to be_nil
@ -191,7 +191,7 @@ RSpec.describe Capybara::RackTest::Driver do
end
it 'is possible to not follow redirects' do
driver = Capybara::RackTest::Driver.new(TestApp, follow_redirects: false)
driver = described_class.new(TestApp, follow_redirects: false)
driver.visit('/redirect')
expect(driver.response.header['Location']).to match %r{/redirect_again$}
@ -201,7 +201,7 @@ RSpec.describe Capybara::RackTest::Driver do
describe ':redirect_limit option' do
context 'with default redirect limit' do
let(:driver) { Capybara::RackTest::Driver.new(TestApp) }
let(:driver) { described_class.new(TestApp) }
it 'should follow 5 redirects' do
driver.visit('/redirect/5/times')
@ -216,7 +216,7 @@ RSpec.describe Capybara::RackTest::Driver do
end
context 'with 21 redirect limit' do
let(:driver) { Capybara::RackTest::Driver.new(TestApp, redirect_limit: 21) }
let(:driver) { described_class.new(TestApp, redirect_limit: 21) }
it 'should follow 21 redirects' do
driver.visit('/redirect/21/times')
@ -251,6 +251,6 @@ RSpec.describe Capybara::RackTest::CSSHandlers do
include CSSHandlerIncludeTester
it 'should not be extended by global includes' do
expect(Capybara::RackTest::CSSHandlers.new).not_to respond_to(:dont_extend_css_handler)
expect(described_class.new).not_to respond_to(:dont_extend_css_handler)
end
end

View File

@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe Capybara do
describe 'Selectors' do
let :string do
Capybara.string <<-STRING
described_class.string <<-STRING
<html>
<head>
<title>selectors</title>
@ -69,12 +69,12 @@ RSpec.describe Capybara do
end
before do
Capybara.add_selector :custom_selector do
described_class.add_selector :custom_selector do
css { |css_class| "div.#{css_class}" }
node_filter(:not_empty, boolean: true, default: true, skip_if: :all) { |node, value| value ^ (node.text == '') }
end
Capybara.add_selector :custom_css_selector do
described_class.add_selector :custom_css_selector do
css(:name, :other_name) do |selector, name: nil, **|
selector ||= ''
selector += "[name='#{name}']" if name
@ -94,7 +94,7 @@ RSpec.describe Capybara do
end
end
Capybara.add_selector :custom_xpath_selector do
described_class.add_selector :custom_xpath_selector do
xpath(:valid1, :valid2) { |selector| selector }
match { |value| value == 'match_me' }
end
@ -102,7 +102,7 @@ RSpec.describe Capybara do
it 'supports `filter` as an alias for `node_filter`' do
expect do
Capybara.add_selector :filter_alias_selector do
described_class.add_selector :filter_alias_selector do
css { |_unused| 'div' }
filter(:something) { |_node, _value| true }
end
@ -111,7 +111,7 @@ RSpec.describe Capybara do
describe 'adding a selector' do
it 'can set default visiblity' do
Capybara.add_selector :hidden_field do
described_class.add_selector :hidden_field do
visible :hidden
css { |_sel| 'input[type="hidden"]' }
end
@ -125,7 +125,7 @@ RSpec.describe Capybara do
it 'allows modifying a selector' do
el = string.find(:custom_selector, 'aa')
expect(el.tag_name).to eq 'div'
Capybara.modify_selector :custom_selector do
described_class.modify_selector :custom_selector do
css { |css_class| "h1.#{css_class}" }
end
el = string.find(:custom_selector, 'aa')
@ -133,7 +133,7 @@ RSpec.describe Capybara do
end
it "doesn't change existing filters" do
Capybara.modify_selector :custom_selector do
described_class.modify_selector :custom_selector do
css { |css_class| "p.#{css_class}" }
end
expect(string).to have_selector(:custom_selector, 'bb', count: 1)
@ -164,7 +164,7 @@ RSpec.describe Capybara do
describe 'xpath' do
it 'uses filter names passed in' do
Capybara.add_selector :test do
described_class.add_selector :test do
xpath(:something, :other) { |_locator| XPath.descendant }
end
selector = Capybara::Selector.new :test, config: nil, format: nil
@ -173,7 +173,7 @@ RSpec.describe Capybara do
end
it 'gets filter names from block if none passed to xpath method' do
Capybara.add_selector :test do
described_class.add_selector :test do
xpath { |_locator, valid3:, valid4: nil| "#{valid3} #{valid4}" }
end
selector = Capybara::Selector.new :test, config: nil, format: nil
@ -182,7 +182,7 @@ RSpec.describe Capybara do
end
it 'ignores block parameters if names passed in' do
Capybara.add_selector :test do
described_class.add_selector :test do
xpath(:valid1) { |_locator, valid3:, valid4: nil| "#{valid3} #{valid4}" }
end
selector = Capybara::Selector.new :test, config: nil, format: nil
@ -205,7 +205,7 @@ RSpec.describe Capybara do
end
it 'uses filter names passed in' do
Capybara.add_selector :test do
described_class.add_selector :test do
css(:name, :other_name) { |_locator| '' }
end
selector = Capybara::Selector.new :test, config: nil, format: nil
@ -214,7 +214,7 @@ RSpec.describe Capybara do
end
it 'gets filter names from block if none passed to css method' do
Capybara.add_selector :test do
described_class.add_selector :test do
css { |_locator, valid3:, valid4: nil| "#{valid3} #{valid4}" }
end
selector = Capybara::Selector.new :test, config: nil, format: nil
@ -223,7 +223,7 @@ RSpec.describe Capybara do
end
it 'ignores block parameters if names passed in' do
Capybara.add_selector :test do
described_class.add_selector :test do
css(:valid1) { |_locator, valid3:, valid4: nil| "#{valid3} #{valid4}" }
end
selector = Capybara::Selector.new :test, config: nil, format: nil
@ -477,7 +477,7 @@ RSpec.describe Capybara do
describe ':link_or_button selector' do
around(:all) do |example|
Capybara.modify_selector(:link_or_button) do
described_class.modify_selector(:link_or_button) do
expression_filter(:random) { |xpath, _| xpath } # do nothing filter
end
example.run

View File

@ -106,7 +106,7 @@ RSpec.describe 'Capybara::Session with firefox' do # rubocop:disable RSpec/Multi
end
RSpec.describe Capybara::Selenium::Driver do
let(:driver) { Capybara::Selenium::Driver.new(TestApp, browser: :firefox, options: browser_options) }
let(:driver) { described_class.new(TestApp, browser: :firefox, options: browser_options) }
describe '#quit' do
it 'should reset browser when quit' do

View File

@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe Capybara::Server do
it 'should spool up a rack server' do
app = proc { |_env| [200, {}, ['Hello Server!']] }
server = Capybara::Server.new(app).boot
server = described_class.new(app).boot
res = Net::HTTP.start(server.host, server.port) { |http| http.get('/') }
@ -14,7 +14,7 @@ RSpec.describe Capybara::Server do
it 'should do nothing when no server given' do
expect do
Capybara::Server.new(nil).boot
described_class.new(nil).boot
end.not_to raise_error
end
@ -26,12 +26,12 @@ RSpec.describe Capybara::Server do
app = proc { |_env| [200, {}, ['Hello Server!']] }
Capybara.server_host = '127.0.0.1'
server = Capybara::Server.new(app).boot
server = described_class.new(app).boot
res = Net::HTTP.get(URI("http://127.0.0.1:#{server.port}"))
expect(res).to eq('Hello Server!')
Capybara.server_host = '0.0.0.0'
server = Capybara::Server.new(app).boot
server = described_class.new(app).boot
res = Net::HTTP.get(URI("http://127.0.0.1:#{server.port}"))
expect(res).to eq('Hello Server!')
ensure
@ -43,7 +43,7 @@ RSpec.describe Capybara::Server do
Capybara.server_port = 22789
app = proc { |_env| [200, {}, ['Hello Server!']] }
server = Capybara::Server.new(app).boot
server = described_class.new(app).boot
res = Net::HTTP.start(server.host, 22789) { |http| http.get('/') }
expect(res.body).to include('Hello Server')
@ -53,7 +53,7 @@ RSpec.describe Capybara::Server do
it 'should use given port' do
app = proc { |_env| [200, {}, ['Hello Server!']] }
server = Capybara::Server.new(app, port: 22790).boot
server = described_class.new(app, port: 22790).boot
res = Net::HTTP.start(server.host, 22790) { |http| http.get('/') }
expect(res.body).to include('Hello Server')
@ -66,7 +66,7 @@ RSpec.describe Capybara::Server do
apps = responses.map do |response|
proc { |_env| [200, {}, [response]] }
end
servers = apps.map { |app| Capybara::Server.new(app).boot }
servers = apps.map { |app| described_class.new(app).boot }
servers.each_with_index do |server, idx|
result = Net::HTTP.start(server.host, server.port) { |http| http.get('/') }
@ -76,7 +76,7 @@ RSpec.describe Capybara::Server do
it 'should return its #base_url' do
app = proc { |_env| [200, {}, ['Hello Server!']] }
server = Capybara::Server.new(app).boot
server = described_class.new(app).boot
uri = ::Addressable::URI.parse(server.base_url)
expect(uri.to_hash).to include(scheme: 'http', host: server.host, port: server.port)
end
@ -87,7 +87,7 @@ RSpec.describe Capybara::Server do
cert = File.join(Dir.pwd, 'spec', 'fixtures', 'certificate.pem')
Capybara.server = :puma, { Host: "ssl://#{Capybara.server_host}?key=#{key}&cert=#{cert}" }
app = proc { |_env| [200, {}, ['Hello SSL Server!']] }
server = Capybara::Server.new(app).boot
server = described_class.new(app).boot
expect do
Net::HTTP.start(server.host, server.port, max_retries: 0) { |http| http.get('/__identify__') }
@ -121,7 +121,7 @@ RSpec.describe Capybara::Server do
it 'should use the existing server if it already running' do
app = proc { |_env| [200, {}, ['Hello Server!']] }
servers = Array.new(2) { Capybara::Server.new(app).boot }
servers = Array.new(2) { described_class.new(app).boot }
servers.each do |server|
res = Net::HTTP.start(server.host, server.port) { |http| http.get('/') }
@ -141,8 +141,8 @@ RSpec.describe Capybara::Server do
[200, {}, ['Hello Server!']]
end
server1 = Capybara::Server.new(app).boot
server2 = Capybara::Server.new(app).boot
server1 = described_class.new(app).boot
server2 = described_class.new(app).boot
expect do
start_request(server1, 1.0)
@ -166,7 +166,7 @@ RSpec.describe Capybara::Server do
it 'should not reuse an already running server' do
app = proc { |_env| [200, {}, ['Hello Server!']] }
servers = Array.new(2) { Capybara::Server.new(app).boot }
servers = Array.new(2) { described_class.new(app).boot }
servers.each do |server|
res = Net::HTTP.start(server.host, server.port) { |http| http.get('/') }
@ -186,8 +186,8 @@ RSpec.describe Capybara::Server do
[200, {}, ['Hello Server!']]
end
server1 = Capybara::Server.new(app).boot
server2 = Capybara::Server.new(app).boot
server1 = described_class.new(app).boot
server2 = described_class.new(app).boot
expect do
start_request(server1, 1.0)
@ -210,7 +210,7 @@ RSpec.describe Capybara::Server do
Capybara.server = :kaboom
expect do
Capybara::Server.new(proc { |e| }).boot
described_class.new(proc { |e| }).boot
end.to raise_error(RuntimeError, 'kaboom')
ensure
Capybara.server = :default
@ -219,7 +219,7 @@ RSpec.describe Capybara::Server do
it 'is not #responsive? when Net::HTTP raises a SystemCallError' do
app = -> { [200, {}, ['Hello, world']] }
server = Capybara::Server.new(app)
server = described_class.new(app)
allow(Net::HTTP).to receive(:start).and_raise(SystemCallError.allocate)
expect(server.responsive?).to eq false
end
@ -234,7 +234,7 @@ RSpec.describe Capybara::Server do
response = Net::HTTPSuccess.allocate
allow(response).to receive(:body).and_return app.object_id.to_s
allow(Net::HTTP).to receive(:start).with(anything, anything, hash_including(use_ssl: true)).and_return(response).once
Capybara::Server.new(app).boot
described_class.new(app).boot
expect(Net::HTTP).to have_received(:start).exactly(3).times
end
end

View File

@ -6,13 +6,13 @@ RSpec.describe Capybara::Session do
context '#new' do
it 'should raise an error if passed non-existent driver' do
expect do
Capybara::Session.new(:quox, TestApp).driver
described_class.new(:quox, TestApp).driver
end.to raise_error(Capybara::DriverNotFoundError)
end
it 'verifies a passed app is a rack app' do
expect do
Capybara::Session.new(:unknown, random: 'hash')
described_class.new(:unknown, random: 'hash')
end.to raise_error TypeError, 'The second parameter to Session::new should be a rack app if passed.'
end
end
@ -75,14 +75,14 @@ RSpec.describe Capybara::Session do
context 'quit' do
it 'will reset the driver' do
session = Capybara::Session.new(:rack_test, TestApp)
session = described_class.new(:rack_test, TestApp)
driver = session.driver
session.quit
expect(session.driver).not_to eql driver
end
it 'resets the document' do
session = Capybara::Session.new(:rack_test, TestApp)
session = described_class.new(:rack_test, TestApp)
document = session.document
session.quit
expect(session.document.base).not_to eql document.base