Test des routes de rails: impossible de trouver les méthodes ActionController :: Assertions :: RoutingAssertions
-
05-07-2019 - |
Question
J'essaie de tester les itinéraires sur mon application rails 2.3.4. Plusieurs sites expliquent comment tester les itinéraires, y compris la documentation Rails, mais je reçois des erreurs en suivant les instructions.
Premièrement, je suppose que ces tests peuvent être effectués dans des fichiers de tests unitaires connexes. Il ne semble plus y avoir d’endroit évident, et aucun des documents n’indique.
Cela dit, il s'agit d'une version condensée de test / unit / TitlesTest.rb
require File.dirname(__FILE__) + '/../test_helper'
class TitleTest < Test::Unit::TestCase
# include ActionController::Assertions::RoutingAssertions
def test_routes
assert_routing "games", { :controller => "titles", :section => "games", :action => "index", :id => nil }
end
end
test de rake: les unités
échouent avec l'erreur suivante:
NoMethodError: undefined method `assert_routing' for #<TitleTest:0x7f387232ec98>
/test/unit/title_test.rb:7:in `test_routes'
J'ai vu dans l'API Rails que assert_routing est défini dans ActionController :: Assertions :: RoutingAssertions
. J'ai donc essayé d'inclure ce module, mais de le faire échouer ailleurs.
Notez la ligne include
commentée dans l'exemple de code ci-dessus.
NoMethodError: undefined method `clean_backtrace' for #<TitleTest:0x7fd895fadf00>
/test/unit/title_test.rb:7:in `test_routes'
clean_backtrace
est une autre méthode de test définie dans ActionController :: TestCase :: Assertions.
Je ne reçois aucun résultat de recherche Google pour ces erreurs - personne ne semble avoir ce problème. Le problème se produit également si je recrée le scénario dans une application rails nouvellement générée. Je ne pense pas que je devrais avoir à inclure ces modules dans mes cas de test. Qu'est-ce qui ne va pas ici?
La solution
Il existe une liste de mise à niveau des pièges Rails sur les robots géants. Apparemment, votre test de routage devrait utiliser la classe ActionController :: TestCase
et non pas ActiveSupport :: TestCase
.
Autres conseils
Les tests de routage doivent être effectués dans le cadre des tests d'intégration.
Celles-ci peuvent être générées à l'aide de routes / script / générer script / générer des tests d'intégration_test
Un exemple:
class RoutesTest < ActionController::IntegrationTest
fixtures :all
def test_resources_route
assert_routing "titles/15", { :controller => "titles", :action => "show", :id => "15" }
end
end
Votre fichier de test d'unité de routage doit inclure le module ActionController :: Assertions :: RoutingAssertions
depuis Rails 2.3.2.