rails example ruby-on-rails rspec helpers

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?

  1. Rspec comienza a ejecutar static_pages_spec.rb (incluyendo utilities.rb )
  2. Rspec ve el método static_pages_spec.rb en static_pages_spec.rb
  3. Rspec comienza a ejecutar application_helper_spec.rb
  4. Rspec ve describe "full_title" do en application_helper_spec.rb
  5. Rspec busca el método original full_title y finaliza la prueba para application_helper_spec.rb
  6. 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.