spec/unit/lib/utils/locator_store_spec.rb in howitzer-1.0.1 vs spec/unit/lib/utils/locator_store_spec.rb in howitzer-1.0.2
- old
+ new
@@ -1,17 +1,20 @@
require 'spec_helper'
-require "#{lib_path}/howitzer/utils/locator_store"
+require 'howitzer/utils/locator_store'
describe "Locator store" do
let(:bad_name) { 'name' }
- let(:error) { LocatorStore::LocatorNotDefinedError }
+ let(:error) { Howitzer::LocatorNotDefinedError }
shared_examples "locator methods" do |prefix, web_page|
describe "#{prefix}locator" do
context "when bad locator given" do
subject { web_page.locator(bad_name) }
- it { expect {subject}.to raise_error(error) }
+ it do
+ expect(log).to receive(:error).with(error, bad_name).once.and_call_original
+ expect { subject }.to raise_error(error)
+ end
end
context "when CSS locator given" do
before { web_page.add_locator :base_locator, 'base_locator' }
subject { web_page.locator(:base_locator) }
it { expect(subject).to eq('base_locator') }
@@ -88,20 +91,52 @@
end
end
end
context "when not existing locator name" do
subject { web_page.find_element(:unknown_locator) }
- it { expect{ subject }.to raise_error(LocatorStore::LocatorNotDefinedError, "unknown_locator") }
+ it { expect{ subject }.to raise_error(Howitzer::LocatorNotDefinedError, "unknown_locator") }
end
end
-
+ describe "#{prefix}first_element" do
+ context "when existing locator name given" do
+ context "of base type" do
+ before { web_page.add_locator :test_locator, '.foo' }
+ subject { web_page.first_element(name) }
+ context "as string" do
+ let(:name) { "test_locator" }
+ it do
+ expect(web_page.is_a?(Class) ? web_page : web_page.class).to receive(:first).with('.foo')
+ subject
+ end
+ end
+ context "as symbol" do
+ let(:name) { :test_locator }
+ it do
+ expect(web_page.is_a?(Class) ? web_page : web_page.class).to receive(:first).with('.foo')
+ subject
+ end
+ end
+ end
+ context "when link locator or other" do
+ before { web_page.add_link_locator :test_link_locator, 'foo' }
+ subject { web_page.first_element(:test_link_locator) }
+ it do
+ expect(web_page.is_a?(Class) ? web_page : web_page.class).to receive(:first).with(:link, 'foo')
+ subject
+ end
+ end
+ end
+ context "when not existing locator name" do
+ subject { web_page.first_element(:unknown_locator) }
+ it { expect{ subject }.to raise_error(Howitzer::LocatorNotDefinedError, "unknown_locator") }
+ end
+ end
describe "#{prefix}apply" do
context "when bad locator given" do
before { web_page.add_locator :test_locator, lambda{|test| test} }
let(:locator) { lambda{|test| test} }
subject { web_page.apply(locator, 'test') }
it { expect {subject}.to raise_error(NoMethodError) }
-
end
context "when correct locator given" do
before { web_page.add_locator :test_locator, lambda{|location_name| {xpath: ".//a[contains(.,'#{location_name}')]"}} }
let(:locator) { lambda{|location_name| {xpath: ".//a[contains(.,'#{location_name}')]"}} }
subject { web_page.apply(locator, 'Kiev') }
\ No newline at end of file