2013-04-16 9 views
5

Ho uno spec rspec:Come includere il routing in ApplicationHelper Spec durante l'esecuzione di Spork?

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 

E l'ApplicationHelper:

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

Questo funziona quando si visita il sito, ma le specifiche fallire con un RuntimeError sul routing non essere disponibile:

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

Quindi, ho incluso lo Rails.application.routes.url nella mia specifica, il file spec_helper e persino lo ApplicationHelper, t o inutile.

Modifica: sto eseguendo i test tramite spork, forse che ha a che fare con lo e causa il problema.

Come devo includere questi helper di percorso durante l'esecuzione con Spork?

risposta

7

È necessario aggiungere include a livello di modulo di ApplicationHelper, perché ApplicationHelper non include l'helper di URL per impostazione predefinita. Codice come questo

module AppplicationHelper 
    include Rails.application.routes.url_helpers 

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

end 

Quindi il codice funzionerà e il test verrà superato.

+0

L'ho già provato e non passa il test: il messaggio di errore rimane lo stesso. – berkes

+1

@berkes, ho già verificato che nella mia console prima di pubblicare la risposta. Funziona. Nella tua domanda, ti ho visto solo menzionato includendolo nel test, ma non nel modulo ApplicationHelper. Non è corretto –

+0

NON è anche 'ApplicationController', ma' ApplicationHelper' –

4

Se si utilizza spork con rspec, si dovrebbe aggiungere il metodo url_helper al vostro config rspec -

Dentro il file '/ spec/spec_helper':

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 

Questo carica un built-in ApplicationHelper ha chiamato "Routes" e chiama il metodo "#url_helpers" in RSpec. Non è necessario aggiungerlo a ApplicationHelper in "/app/helpers/application_helper.rb" per due motivi:

1) Si sta semplicemente copiando la funzionalità "rotte" in un luogo che non ne ha bisogno, in sostanza il controller, che già lo eredita da ActionController :: Base (penso. forse :: Metal. non è importante ora). quindi non sono essere asciutto - Non Repeat Yourself

2) Questo errore è specifico per la configurazione RSpec, fissarlo dove è rotto (il mio piccolo aforisma)

Avanti, mi consiglia di fissare il test un po. Prova questo:

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 

Spero che questo sia utile a qualcuno!

0

Stavo usando guard con spring e ho scoperto che, nel mio caso, il problema era causato dalla primavera. Dopo aver eseguito spring stop è stato corretto. Ma continua a tornare a volte quando cambio qualcosa in un ApplicationController.

Problemi correlati