4

J'ai un itinéraire que j'utilise des contraintes pour vérifier l'hôte et ensuite un itinéraire qui est essentiellement le même mais sans la restriction d'hôte (ce sont vraiment des espaces de noms mais pour simplifier les choses cet exemple fera):Test des routes avec des contraintes d'hôte via assert_routing dans Rails

match "/(:page_key)" => "namespace_one/pages#show", :constraints => proc {|env| env['SERVER_NAME'] == 'test.mysite.local' } 

match "/(:page_key)" => "namespace_two/pages#show" 

Ils fonctionnent exactement comme prévu lors de l'accès via le navigateur et dans les tests d'intégration lors de la définition de l'hôte et de faire get "/page_key" etc.

Cependant, je veux écrire des tests qui assure que ces routes fonctionnent jusqu'à présent, je n'ai pas beaucoup de chance que le test suivant (qui est actuellement dans un ActionController::IntegrationTest donc je peux définir l'hôte) est correspondant à celui sans la contrainte:

assert_routing '', { :controller => 'namespace_one/pages', :action => 'show' } 
=> The recognized options <{"action"=>"show", "controller"=>"frontend/pages"}> 
    did not match <{"action"=>"show", "controller"=>"namespace_two/pages"}>, 
    difference: <{"controller"=>"namespace_one/pages"}> 

Si je tente le dumping env dans les contraintes PROC tout ce que je reçois est --- :controller. Si je me débarrasse de l'assert_routing et que j'effectue simplement un appel get :show et que je vide le @controller, il se résout au bon contrôleur (comme prévu, car ces routes fonctionnent bien via les requêtes HTTP).

Répondre

6

Juste eu ce problème moi-même. Cela a été corrigé par un correctif Rails qui vous permet de spécifier des URL complètes dans les tests de routage.

Changer votre test à

assert_routing 'http://test.mysite.loacl', { :controller => 'namespace_one/pages', 
              :action => 'show' } 

et cela fonctionnera très bien. Vous devez inclure ": //" dans l'url complète. B/c rails utilise une regex pour rechercher% r {: //} dans le chemin, sinon il va automatiquement couper la partie hôte de l'URL, et le test va faire erreur.

Voici le patch Relavent http://tinyurl.com/28erq86