2010-10-27 13 views
19

Ich habe eine View-Hilfsmethode, die eine URL generiert, indem ich request.domain und request.port_string anschaue.Wie mock Anfrageobjekt für rspec Helfertests?

module ApplicationHelper 
     def root_with_subdomain(subdomain) 
      subdomain += "." unless subdomain.empty?  
      [subdomain, request.domain, request.port_string].join 
     end 
    end 

Ich möchte diese Methode mit Rspec testen.

describe ApplicationHelper do 
    it "should prepend subdomain to host" do 
    root_with_subdomain("test").should = "test.xxxx:xxxx" 
    end 
end 

Aber wenn ich dies mit rspec laufen, bekomme ich diese:

Failure/Error: root_with_subdomain("test").should = "test.xxxx:xxxx" 
`undefined local variable or method `request' for #<RSpec::Core::ExampleGroup::Nested_3:0x98b668c>` 

Kann jemand bitte helfen Sie mir herauszufinden, was soll ich dieses Problem beheben zu tun? Wie kann ich das "Anfrage" -Objekt für dieses Beispiel verspotten?

Gibt es bessere Möglichkeiten zum Generieren von URLs, wo Subdomänen verwendet werden?

Vielen Dank im Voraus.

Antwort

21

Sie haben die Hilfsmethode mit ‚Helfer‘ vorangestellt wird:

describe ApplicationHelper do 
    it "should prepend subdomain to host" do 
    helper.root_with_subdomain("test").should = "test.xxxx:xxxx" 
    end 
end 

Zusätzlich Verhalten für unterschiedliche Anforderungsoptionen zu testen, können Sie die Anforderung Zugriff auf Objekt throught der Steuerung:

describe ApplicationHelper do 
    it "should prepend subdomain to host" do 
    controller.request.host = 'www.domain.com' 
    helper.root_with_subdomain("test").should = "test.xxxx:xxxx" 
    end 
end 
+2

Es gibt Fehler: Ausnahme festgestellt: # shailesh

7

I hatte ein ähnliches Problem, ich fand diese Lösung zu arbeiten:

before(:each) do 
    helper.request.host = "yourhostandorport" 
end 
+0

Für mich in Controller mit 'Controller gearbeitet. request.host = "http://test_my.com/" ' – AnkitG

9

Dies ist kein a vollständige Antwort auf Ihre Frage, aber für den Datensatz können Sie eine Anfrage mit ActionController::TestRequest.new() Mock vortäuschen. Etwas wie:

+0

Könnten Sie das näher erläutern? –