2 Stimmen

Problem mit Helper-Methode in Rails

Ich habe die folgende Helper-Methode (app/helpers/application_helper.rb):

module ApplicationHelper

 #Return a title on a per-page basis
 def title
   base_title = "Ruby on Rails Tutorial Sample App"
   if @title.nil?
     base_title
   else
     "#{base_title} | #{@title}"
   end
 end
end

und hier ist die erb ( app/views/layouts/application.html.erb):

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <%= csrf_meta_tag %>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

Ich habe einen rspec-Test durchgeführt, um zu sehen, ob diese Hilfsmethode funktioniert, und es scheint, dass sie den Titel nicht finden kann.

Hier ist die Fehlermeldung:

Failures:

  1) PagesController GET 'home' should be successful
     Failure/Error: get 'home'
     ActionView::Template::Error:
       undefined local variable or method `title' for #<#<Class:0x991ecb4>:0x991315c>
     # ./app/views/layouts/application.html.erb:4:in `_app_views_layouts_application_html_erb__248109341_80250010__979063050'
     # ./spec/controllers/pages_controller_spec.rb:8:in `block (3 levels) in <top (required)>'

  2) PagesController GET 'home' should have the right title
     Failure/Error: get 'home'
     ActionView::Template::Error:
       undefined local variable or method `title' for #<#<Class:0x991ecb4>:0x9d7d094>
     # ./app/views/layouts/application.html.erb:4:in `_app_views_layouts_application_html_erb__248109341_82566280__979063050'
     # ./spec/controllers/pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>'

Kann mir jemand sagen, was ich falsch gemacht habe?

UPDATE:

Ich habe die Hilfskraft wie folgt eingebunden:

 describe PagesController do
      include ApplicationHelper
      render_views

      describe "GET 'home'" do
        it "should be successful" do
          get 'home'
          response.should be_success
        end

       it "should have the right title" do
      get 'home'
      response.should have_selector("title",
                        :content => "Ruby on Rails Tutorial Sample App | Home")
    end
  end

//and some more

Ich erhalte jedoch immer noch den gleichen Fehler

2voto

Gazler Punkte 81143

In Ihren Ansichten sind die Helfer standardmäßig nicht enthalten.

Sie können die Hilfsmethoden mit Hilfe des Vorlagenobjekts nachbilden :

template.should_receive(:title).and_return("Title")

Sie können dann Ihre Helfer getrennt.

Alternativ können Sie Ihre Helfer in Ihre Ansichtsspezifikation aufnehmen, indem Sie dies einfach tun:

include ApplicationHelper

EDIT

describe PagesController do
  include ApplicationHelper

  describe "GET 'home'" do
    it "should be successful" do
      controller.template.should_receive(:title).and_return("Title")
      get 'home'
      response.should be_success
    end
  end
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X