web-dev-qa-db-fra.com

Tests Capybara avec: js => true ... Erreur de routage: aucun itinéraire ne correspond à [GET] "/ assets"

Je reçois une erreur similaire dans un certain nombre de tests en leur ajoutant ": js => true". par exemple:

    An error occurred in an after hook
      ActionController::RoutingError: No route matches [GET] "/assets"
      occurred at /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'

Je n'avais jamais testé de contenu JavaScript dans mon application auparavant et je viens de le configurer en mettant à niveau Capybara 2 et en installant Database Cleaner. config.use_transactional_fixtures = false et j'ai ajouté des crochets avant/après (crochets?) à mon fichier spec_helper que j'ai copiés directement à partir de la réponse acceptée ici .

Je suis entrain de courir:

  • Rails 3.2.5
  • Rspec-Rails 2.12.2.

Quelqu'un peut-il me dire comment je peux attaquer celui-ci? Merci beaucoup!

    4) Event pages 'CREATE' submitting a valid form provides a success notification and displays new event's page 
    Failure/Error: Unable to find matching line from backtrace
    ActionController::RoutingError:
    No route matches [GET] "/assets"
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/Rails/rack/logger.rb:26:in `call_app'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/Rails/rack/logger.rb:16:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/request_id.rb:22:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/methodoverride.rb:21:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/runtime.rb:17:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/activesupport-3.2.5/lib/active_support/cache/strategy/local_cache.rb:72:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/lock.rb:15:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/actionpack-3.2.5/lib/action_dispatch/middleware/static.rb:62:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/Rails/engine.rb:479:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/railties-3.2.5/lib/Rails/application.rb:220:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/builder.rb:134:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/urlmap.rb:64:in `block in call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/urlmap.rb:49:in `each'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/urlmap.rb:49:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/bundler/gems/capybara-8368069cfd05/lib/capybara/server.rb:19:in `call'
    # /Users/appletart/.rvm/gems/Ruby-1.9.3-p0@eventful2/gems/rack-1.4.1/lib/rack/handler/webrick.rb:59:in `service'
    # /Users/appletart/.rvm/rubies/Ruby-1.9.3-p0/lib/Ruby/1.9.1/webrick/httpserver.rb:138:in `service'
    # /Users/appletart/.rvm/rubies/Ruby-1.9.3-p0/lib/Ruby/1.9.1/webrick/httpserver.rb:94:in `run'
    # /Users/appletart/.rvm/rubies/Ruby-1.9.3-p0/lib/Ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
40
Reb

Votre itinéraire manquant ressemble à un chemin d’actifs généré automatiquement avec une entrée nulle. Etes-vous sûr que vos actifs sont correctement spécifiés dans votre css/sass ou quelle que soit l'origine de cet itinéraire? 

Je me débattais avec un problème similaire dans lequel un chemin d'actif induisait une erreur de routage

  1) user signup: [ JS ] : creates User on successful signup
     Failure/Error: Unable to find matching line from backtrace
     ActionController::RoutingError:
       No route matches [GET] "/assets/images/leftArrow.png"

suivi d'une trace de pile pratiquement identique à la vôtre. Dans mon cas, il s'est avéré que l'actif était en fait manquant (ce qui est passé inaperçu dans mon développement.log et dans mon environnement de test jusqu'à récemment, j'ai imprudemment «bundle» mis à jour un projet après plusieurs mois d'inactivité)

En cours de route, j'ai beaucoup appris sur l'app_Host et la gestion d'actifs de Capybara, la précompilation d'actifs dans différents environnements, Application.configure.assets. [Debug | digest | ...] et similaires, ce qui est probablement l'endroit où vous devriez commencer vos recherches. . Ou dans l'aide de l'URL sprockets/sass-Rails ... après tout, votre itinéraire manquant ressemble toujours à un chemin de ressources généré automatiquement avec une entrée vide)

Si ce qui précède n’aide pas, une solution de contournement pourrait être d’ajouter la ligne suivante dans environnements/test.rb:

config.action_dispatch.show_exceptions = true

Sans traiter directement le problème, il a réussi à le supprimer dans mon cas. 

Un autre type de solution de contournement pourrait être dans spec_helper.rb:

 ActionController::Base.asset_Host = "http://myapp.dev"

où myapp.dev est une instance en cours de développement de myApp en mode développement, qui fournit les actifs ou du moins ne frappe pas votre routage de test pour les actifs, mais il est probable que vous ne devez le faire que de manière totalement désajustée. C'est inspiré par la stratégie pour éviter la compilation d'actifs comme expliqué dans http://johnbintz.github.com/blog/2012/01/07/cucumber-capybara-asset-pipeline-debug-mode/

Aussi potentiellement utile: http://guides.rubyonrails.org/asset_pipeline.htmlhttp://rubydoc.info/github/jnicklas/capybara/master/Capybara#configure-class_method

45
christian.buggle

Dans mon cas, ajouter:

config.assets.debug = true

à config/environments/test.rb corrigé.

Dans la documentation , il est dit que:

Vous ne devriez pas avoir besoin de changer test.rb. Les valeurs par défaut dans l'environnement de test sont les suivantes: config.assets.compile est true et config.assets.compress, config.assets.debug et config.assets.digest sont false.

Mais, au moins dans mon cas, je devais le changer ... Si quelqu'un pouvait expliquer exactement pourquoi cela fonctionne, je serais heureux ...

22
Waiting for Dev...

Dans mon cas, je reçois

 Failure/Error: Unable to find matching line from backtrace
 ActionController::RoutingError:
   No route matches [GET] "/favicon.ico"

J'ai déjà mis un fichier vide favicon.ico sous app/assets/images, donc le serveur de développement est correct. Mais l'environnement de test ne sait pas comment gérer les actifs dans ce cas. La solution que j'ai trouvée consistait à activer le service statique (au lieu d'utiliser un autre serveur pour gérer les actifs statiques). La peine est bien sûr la performance.

  in environments/test.rb, set
  config.serve_static_assets = true # default is false
1
Dingle

Dans mon cas, l'image manquante par défaut était définie pour pointer sur s3. Je me fichais vraiment de savoir si l'image était chargée ou non. PhantomJs a une option pour désactiver le chargement d’image via la ligne de commande arg --load-images=no.

Dans Poltergeist, ceci peut être configuré lors de l’enregistrement du pilote:

Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, :phantomjs_options => ['--load-images=no']) end

0
cgat