2013-04-16 2 views
5

Ich habe eine rspec spec:Wie fügt man Routing in ApplicationHelper Spec bei, wenn es durch Spork läuft?

require "spec_helper" 

describe ApplicationHelper do 
    describe "#link_to_cart" do 
    it 'should be a link to the cart' do 
     helper.link_to_cart.should match /.*href="\/cart".*/ 
    end 
    end 
end 

Und den ApplicationHelper:

module ApplicationHelper 
    def link_to_cart 
    link_to "Cart", cart_path 
    end 
end 

Dies funktioniert, wenn Sie die Website besuchen, aber die Spezifikationen nicht mit einem Runtime über Routing nicht zur Verfügung steht:

RuntimeError: 
    In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers 

Also, ich habe die Rails.application.routes.url in meiner Spezifikation, die spec_helper-Datei und sogar die ApplicationHelper selbst, t o kein Erfolg.

Edit: Ich führe die Tests über Spork, vielleicht hat das damit zu tun und verursacht das Problem.

Wie muss ich diese Weghelfer beim Laufen mit Spork einbeziehen?

Antwort

7

Sie müssen include auf Modulebene ApplicationHelper hinzufügen, da ApplicationHelper den URL-Helper nicht standardmäßig enthält. Code wie dieser

module AppplicationHelper 
    include Rails.application.routes.url_helpers 

    # ... 
    def link_to_cart 
    link_to "Cart", cart_path 
    end 

end 

Dann wird der Code funktionieren und Ihr Test wird bestanden.

+0

Ich habe das bereits versucht, und es macht den Test nicht bestanden: die Fehlermeldung bleibt gleich. – berkes

+1

@berkes, ich habe das bereits in meiner Konsole verifiziert, bevor ich die Antwort gepostet habe. Es klappt. In Ihrer Frage habe ich nur erwähnt, dass Sie es im Test, aber nicht im ApplicationHelper-Modul erwähnt haben. Das ist falsch. –

+0

Es ist auch nicht 'ApplicationController', sondern' ApplicationHelper' –

4

Wenn Sie spork mit rspec verwenden, sollten Sie die url_helper Methode, um Ihre rspec Config hinzufügen -

In Ihrem '/ spec/spec_helper' file:

RSpec.configure do |config| 
. 
. =begin 
. bunch of stuff here, you can put the code 
. pretty much anywhere inside the do..end block 
. =end 
config.include Rails.application.routes.url_helpers 
. 
. #more stuff 
end 

diese lädt einen eingebauten, ApplicationHelper ruft "Routes" auf und ruft die Methode "#url_helpers" in RSpec auf. Es gibt keine Notwendigkeit, es dem ApplicationHelper in '/app/helpers/application_helper.rb' aus zwei Gründen hinzuzufügen:

1) Sie kopieren 'Routen' Funktionalität nur an einen Ort, der es im Wesentlichen nicht benötigt der Controller, der es bereits von ActionController :: Base erbt (ich denke. vielleicht :: Metal. nicht wichtig jetzt). so dass Sie nicht DRY zu sein - nicht selbst wiederholen

2) Dieser Fehler ist spezifisch für RSpec Konfiguration, es zu beheben, wo es pleite ist (Mein eigener kleiner Aphorismus)

Als nächstes würde ich empfehlen, den Test zur Festsetzung ein bisschen. Versuchen Sie dies:

require "spec_helper" 

describe ApplicationHelper do 
    describe "#link_to_cart" do 
    it 'should be a link to the cart' do 
    visit cart_path 
    expect(page).to match(/.*href="\/cart".*/) 
    end 
    end 
end 

Ich hoffe, dass dies für jemanden hilfreich ist!

0

Ich benutzte guard mit spring und ich fand heraus, dass in meinem Fall das Problem durch den Frühling verursacht wurde. Nach der Ausführung von spring stop wurde es behoben. Aber es kommt manchmal wieder, wenn ich etwas in einem ApplicationController ändere.

Verwandte Themen