Test dei percorsi delle rotaie: impossibile trovare i metodi ActionController :: Assertions :: RoutingAssertions
-
05-07-2019 - |
Domanda
Sto provando a testare i percorsi sulla mia applicazione 2.3.4. Esistono diversi siti che spiegano come testare i percorsi, compresi i documenti di rotaie, ma ricevo errori seguendo le istruzioni.
In primo luogo, presumo che questi test possano essere eseguiti in file di test unitari correlati. Sembra che non ci sia posto più ovvio e nessuno dei documenti specifica.
Detto questo, questa è una versione ridotta di 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 del rake: unità
non riuscito con errore:
NoMethodError: undefined method `assert_routing' for #<TitleTest:0x7f387232ec98>
/test/unit/title_test.rb:7:in `test_routes'
Ho visto nell'API di Rails che assert_routing è definito in ActionController :: Assertions :: RoutingAssertions
, quindi ho provato a includere quel modulo, solo per farlo fallire altrove.
Nota la riga commentata include
nell'esempio di codice sopra.
NoMethodError: undefined method `clean_backtrace' for #<TitleTest:0x7fd895fadf00>
/test/unit/title_test.rb:7:in `test_routes'
clean_backtrace
è un altro metodo di test definito in ActionController :: TestCase :: Assertions.
Non sto ottenendo risultati di ricerca su Google per questi errori - nessun altro sembra avere questo problema. Il problema si verifica anche se ricrea lo scenario in un'app Rails appena generata. Non penso che dovrei includere questi moduli nei miei casi di test. Cosa potrebbe esserci di sbagliato qui?
Soluzione
C'è un elenco di upgrade di Rails gotchas su robot giganti. Apparentemente il tuo test di routing dovrebbe usare la classe ActionController :: TestCase
, non ActiveSupport :: TestCase
.
Altri suggerimenti
I test di routing devono essere eseguiti come parte dei test di integrazione.
Questi possono essere generati usando script / generate script / generate route_test di integrazione
Un esempio:
class RoutesTest < ActionController::IntegrationTest
fixtures :all
def test_resources_route
assert_routing "titles/15", { :controller => "titles", :action => "show", :id => "15" }
end
end
Il file di test dell'unità di routing deve includere il modulo ActionController :: Assertions :: RoutingAssertions
da Rails 2.3.2.