2012-09-20 7 views
15

Biorąc pod uwagę Mam metodę full_title w module ApplicationHelper, w jaki sposób można uzyskać do niego dostęp w specyfikacji żądania RSpec?Czy mogę uzyskać dostęp do aplikacji Helper Method w żądaniu RSpec?

Mam następujący kod now:

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 

na prowadzeniu tę specyfikację, otrzymuję komunikat o błędzie:

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

Zgodnie z testami w Rails Tutorial Michaela Hartla, powinienem mieć dostęp do metod pomocnika aplikacji w mojej specyfikacji użytkownika. Jaki błąd tu popełniam?

+0

Mam dokładnie to samo kod i to działa dla mnie. Czy możesz dodać więcej informacji do swojego komunikatu o błędzie? Czy posiadasz repozytorium github, które możesz udostępnić? –

+0

Czy utworzyłeś plik 'utilities.rb' z programem pomocniczym w katalogu' spec/support'? – veritas1

+0

Sprawdziłem [Twój kod] (https://github.com/movingahead/sample_app) i wszystkie specyfikacje przekazane. Czy migrowałeś swoją bazę danych, a nie restartowałeś spouts? –

Odpowiedz

2

Utwórz pomocnika w numerze spec/support/utilities.rb zgodnie z listą 5.26 książki.

+4

Przypuszczalnie jest to plik application_helper.rb, ponieważ chcesz go użyć w swojej aplikacji. Przeniesienie go do specyfikacji/zapobiegnie temu, a skopiowanie go nie będzie bardzo suche. Nultyi to lepsze podejście. – Brandon

+1

Tak, jest, jeśli istnieje specyfikacja dla metody pomocnika. – veritas1

33

Inną opcją jest umieszczenie go bezpośrednio w spec_helper

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

robię Ruby on Rails Tutorial (Szyny wersji 4.0) przy użyciu aktualnie najnowsze wersje każdego gem. Doświadczyłem podobnego problemu, zastanawiając się, jak dołączyć ApplicationHelper do specyfikacji. Dostałem go pracy z następującego kodu:

Spec/rails_helper.rb

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

Spec/wnioski/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

To powinno być zaakceptowane odpowiedź ponownie: SUCHA – yamori