2016-10-18 3 views
0

En utilisant la pointe here J'ai construit une méthode dans un module d'aide comme ceci:Test link_to sans chemin aide à l'aide Rspec

describe ExampleHelper do 
    def build_link 
    link_to "RSS feed", params.merge(:format => :rss), :class => "feed_link" 
    end 
end 

Cependant, quand je teste cette méthode, je reçois l'erreur suivante:

Failure/Error: subject { helper.build_link } 
ActionController::UrlGenerationError: 
    No route matches {:action=>"index", :foo=>"bah", :foobah=>["1", "2", "3"], :results_per_page=>"25"} 
# /Users/tombrammar/.rvm/gems/[email protected]/gems/actionpack-4.2.6/lib/action_dispatch/journey/formatter.rb:46:in `generate' 
# /Users/tombrammar/.rvm/gems/[email protected]/gems/actionpack-4.2.6/lib/action_dispatch/routing/route_set.rb:721:in `generate' 
# /Users/tombrammar/.rvm/gems/[email protected]/gems/actionpack-4.2.6/lib/action_dispatch/routing/route_set.rb:752:in `generate' 
# /Users/tombrammar/.rvm/gems/[email protected]/gems/actionpack-4.2.6/lib/action_dispatch/routing/route_set.rb:799:in `url_for' 
# /Users/tombrammar/.rvm/gems/[email protected]/gems/actionpack-4.2.6/lib/action_dispatch/routing/url_for.rb:156:in `url_for' 
# /Users/tombrammar/.rvm/gems/[email protected]/gems/actionview-4.2.6/lib/action_view/routing_url_for.rb:94:in `url_for' 
# /Users/tombrammar/.rvm/gems/[email protected]/gems/actionview-4.2.6/lib/action_view/helpers/url_helper.rb:181:in `link_to' 

Il semble que parce que je teste dans l'aide il ne peut pas déterminer quel contrôleur utiliser et donc comment construire l'URL.

Quelqu'un peut-il m'aider à comprendre comment résoudre ce problème? C'est à dire. peut-être que je peux talonner le contrôleur de l'aide rspec?

+0

Pouvez-vous nous indiquer la route pertinente? (à la fois dans votre fichier routes et via les routes rake) –

+0

@TarynEast Comme je l'ai dit plus haut, vous pouvez appeler 'link_to' sans passer par un chemin. Il essaie ensuite de déduire votre chemin actuel lui-même. Cela fonctionne très bien en pratique, mais lors d'un test via rspec (et donc sans contrôleur courant), il renvoie cette erreur. –

+0

Comme je l'ai dit plus haut ... (BTW c'est une phrase terrible probablement vous ne devriez pas l'utiliser) - pouvez-vous s'il vous plaît nous montrer le chemin de la page d'origine ... parce que cela nous aidera à déterminer quels paramètres il attend et qu'est-ce l'amenant à se casser :) et oui, sans un contrôleur actuel - il ne fonctionnera tout simplement pas - pourquoi n'y a-t-il pas de contrôleur actuel dans votre spécification? –

Répondre

1

Ceci est un truc sale si vous utilisez des paramètres comme ci-dessus.

allow(helper).to receive(:params).and_return(_recall: { controller: 'homes' }) 

Voici également une autre façon de le faire qui est un moyen rapide de faire le travail.

https://stackoverflow.com/a/22265920/1431800