2012-09-20 15 views
15

Dado que tengo un método full_title en el módulo ApplicationHelper, ¿cómo puedo acceder a él en una especificación de solicitud RSpec?¿Puedo acceder a los métodos de Application Helper en una solicitud de RSpec?

tengo el siguiente código ahora:

app/helpers/application_helper.rb

module ApplicationHelper 

    # Returns the full title on a per-page basis. 
    def full_title(page_title) 
     base_title = "My Site title" 
     logger.debug "page_title: #{page_title}" 
     if page_title.empty? 
     base_title 
     else 
     "#{page_title} - #{base_title}" 
     end 
    end 

spec/requests/user_pages_spec.rb

require 'spec_helper' 

    describe "User Pages" do 
     subject { page } 

     describe "signup page" do 
      before { visit signup_path } 

      it { should have_selector('h2', text: 'Sign up') } 
      it { should have_selector('title', text: full_title('Sign Up')) } 

     end 
    end 

Al ejecutar esta especificación, me sale este mensaje de error:

NoMethodError: undefined method full_title' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x00000003d43138>

Según las pruebas en Michael Hartl's Rails Tutorial, debería poder acceder a los métodos de ayuda de aplicación en mi especificación de usuario. ¿Qué error estoy haciendo aquí?

+0

que tiene exactamente el mismo código y funciona para mí. ¿Puedes agregar más información a tu mensaje de error? Además, ¿tienes un repositorio github que puedes compartir? –

+0

¿Ha creado su archivo 'utilities.rb' con el helper, en su directorio' spec/support'? – veritas1

+0

Revisé [su código] (https://github.com/movingahead/sample_app) y pasaron todas las especificaciones. ¿Migró su base de datos y no reinició spork? –

Respuesta

2

Cree el ayudante en spec/support/utilities.rb según el listado 5.26 del libro.

+4

Presumiblemente, está en application_helper.rb porque quiere usarlo en su aplicación. Moverlo a especificaciones/lo evitaría, y copiarlo no es muy SECO. Nultyi es el mejor enfoque. – Brandon

+1

Sí lo es, si hay una especificación para el método de ayuda. – veritas1

33

Otra opción es incluir directamente en el spec_helper

RSpec.configure do |config| 
    ... 
    config.include ApplicationHelper 
end 
4

que estoy haciendo Ruby on Rails Tutorial (Rails versión 4.0) usando actualmente últimas versiones de cada gema. Experimenté un problema similar preguntándome cómo incluir el ApplicationHelper a las especificaciones. Tengo que trabajar con el código siguiente:

especificación

/rails_helper.rb

RSpec.configure do |config| 
    ... 
    config.include ApplicationHelper 
end 

spec/peticiones/user_pages_spec.rb

require 'rails_helper' 

describe "User pages", type: :feature do 
    subject { page } 

    describe "signup page" do 
    before { visit signup_path } 

    it { is_expected.to have_selector('h2', text: 'Sign up') } 
    it { is_expected.to have_selector('title', text: full_title('Sign Up')) } 
    end 
end 

Gemfile

... 
# ruby 2.2.1 
gem 'rails', '4.2.1' 
... 
group :development, :test do 
    gem 'rspec-rails', '~> 3.2.1' 
    ... 
end 

group :test do 
    gem 'capybara', '~> 2.4.4' 
    ... 
+1

Esto debe aceptarse respuesta re: DRY – yamori

Cuestiones relacionadas