2013-06-24 3 views
1

Ce passe spec mais échoue après locale introduction (l'application fonctionne cependant):Rails vue rspec avec locale, Aucun itinéraire correspond

require 'spec_helper' 
describe "products/show" do 
    before do 
    assign(:product, mock_model("Product", name: "Car", description: "petrol engine")) 
    end 
    it "renders name" do 
    render 
    expect(rendered).to match /Car/ 
    end 
end 

Puis-je ajouter une portée aux routes pour inclure les paramètres régionaux: .. .

scope "/:locale" do 
    resources :products 
    root :to => 'products#index' 
    end 

...

Dans contrôleur d'application je définis:

def self.default_url_options(options={}) 
    logger.debug "default_url_options is passed options: #{options.inspect}\n" 
    I18n.locale = 'en' # fixed for tests 
    { :locale => I18n.locale} 
end 

Dans le navigateur l'application fonctionne à nouveau avec des chemins comme /fr/produit/1 pour rendre le modèle de spectacle

Mais mon test échoue ci-dessus:

1) products/show renders name Failure/Error: render ActionView::Template::Error: No route matches {:action=>"edit", :controller=>"products", :locale=>#} # ./app/views/products/show.html.erb:14:in _app_views_products_show_html_erb__333746538_80999240' # ./spec/views/products/show.html.erb_spec.rb:10:in block (2 levels) in '

Pourquoi le test échoue lors de l'application fonctionne?

Comment le faire passer?

+0

Il semble que rspec ne respecte pas default_url_options. Voir https://github.com/rspec/rspec-rails/issues/255 – Ernst

Répondre

1

Cette solution fonctionne pour moi:

copié de https://github.com/rspec/rspec-rails/issues/255 Auteur: https://github.com/oelmekki

class ActionDispatch::Routing::RouteSet 
    def url_for_with_locale_fix(options) 
    url_for_without_locale_fix({:locale => I18n.default_locale}.merge(options)) 
    end 
    alias_method_chain :url_for, :locale_fix 
end 
+0

'spec rspec/vues' fonctionne maintenant, mais 'printemps spec rspec/views' ne le fait pas ActionView :: Template :: Erreur: niveau de la pile trop profond # /usr/local/rvm/gems/ruby-1.9.3-head/gems/activesupport-3.2.13/lib/active_support/notifications/instrumenter.rb:23 Je me suis habitué à tester avec ressort de garde. Maintenant, cela ne fonctionne pas pour les vues. – Ernst

Questions connexes