ruby-on-rails - example - rails selenium
Rails/RSpec-pruebas de escritura para los métodos originales de ayuda (1)
Estoy en los ejercicios del capítulo 5 para el tutorial de Rails de Michael Hartl y estoy tratando de entender cómo Rails / Rspec está probando un método de ayuda full_title
en la app/helpers/application_helper.rb
. Todas mis pruebas están en spec/requests/static_pages_spec.rb
y dentro de ellas, estoy llamando a full_title
para reducir el código de bloat.
Entonces, para probar el full_title
original, creo una prueba en spec/helpers/application_helpers_spec.rb
y la full_title
través de spec/support/utilities.rb
. El código está pasando, pero quiero entender el proceso (orden a las operaciones) de lo que está sucediendo. Gracias.
¿Puedo pensar de esta manera?
- Rspec comienza a ejecutar
static_pages_spec.rb
(incluyendoutilities.rb
) - Rspec ve el método
static_pages_spec.rb
enstatic_pages_spec.rb
- Rspec comienza a ejecutar
application_helper_spec.rb
- Rspec ve
describe "full_title" do
enapplication_helper_spec.rb
- Rspec busca el método original
full_title
y finaliza la prueba paraapplication_helper_spec.rb
- Rspec finaliza las pruebas en static_pages_spec.rb
, iterating through above process when
se llama a full_title`.
static_pages_spec.rb
require ''spec_helper''
describe "Static pages" do
subject { page }
shared_examples_for "all static pages" do
it { should have_selector(''h1'', text: heading) }
it { should have_selector(''title'', text: full_title(page_title)) }
end
describe "Home page" do
before { visit root_path }
let(:heading) { ''Sample App'' }
let(:page_title) { '''' }
it_should_behave_like "all static pages"
it { should_not have_selector ''title'', text: ''| Home'' }
end
describe "Help page" do
before { visit help_path }
let(:heading) { ''Help'' }
let(:page_title) { ''Help'' }
it_should_behave_like "all static pages"
end
describe "About page" do
before { visit about_path }
let(:heading) { ''About'' }
let(:page_title) { ''About Us'' }
it_should_behave_like "all static pages"
end
describe "Contact page" do
before { visit contact_path }
let(:heading) { ''Contact'' }
let(:page_title) { ''Contact'' }
it_should_behave_like "all static pages"
end
it "should have the right links on the layout" do
visit root_path
click_link "About"
page.should have_selector ''title'', text: full_title(''About Us'')
click_link "Help"
page.should have_selector ''title'', text: full_title(''Help'')
click_link "Contact"
page.should have_selector ''title'', text: full_title(''Contact'')
click_link "Home"
page.should have_selector ''title'', text: full_title('''')
click_link "Sign up now!"
page.should have_selector ''title'', text: full_title(''Sign up'')
click_link "sample app"
page.should_not have_selector ''title'', text: full_title(''| Home'')
end
end
application_helper_spec.rb
require ''spec_helper''
describe ApplicationHelper do
describe "full_title" do
it "should include the page title" do
full_title("foo").should =~ /foo/
end
it "should include the base title" do
full_title("foo").should =~ /^Ruby on Rails Tutorial Sample App/
end
it "should not include a bar for the home page" do
full_title("").should_not =~ //|/
end
end
end
application_helper.rb
module ApplicationHelper
#Returns the full title on a per-page basis.
def full_title(page_title)
base_title = "Ruby on Rails Tutorial Sample App"
if page_title.empty?
base_title
else
"#{base_title} | #{page_title}"
end
end
end
Piensa en ello de esta manera:
El ''full_title'' llamado en static_pages_spec.rb
(incluyendo utilities.rb) ejecuta el método ''full_title'' descrito en application_helper.rb.
El archivo application_helper_spec.rb
valida la cadena / valor (page_title) que se pasa por full_title. Si no me equivoco, lo hace cada vez que se full_title
método full_title
en sus pruebas.