Teste trilhos rotas: não consegue encontrar ActionController :: Afirmações :: métodos RoutingAssertions
-
05-07-2019 - |
Pergunta
Eu estou tentando testar as rotas em meus trilhos 2.3.4 aplicação. Existem vários sites que explicam como rotas de teste, incluindo os docs trilhos, mas estou recebendo erros seguindo as instruções.
Em primeiro lugar, eu estou supondo que estes testes podem ser feitos em arquivos de teste de unidade relacionados. Parece haver lugar mais óbvio, e nenhum dos docs especificar.
Dito isto, esta é uma versão condensada do 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
rake test:units
falha com o erro:
NoMethodError: undefined method `assert_routing' for #<TitleTest:0x7f387232ec98>
/test/unit/title_test.rb:7:in `test_routes'
Eu vi na API do Rails que assert_routing é definida em ActionController::Assertions::RoutingAssertions
, então eu tentou incluir esse módulo, apenas para tê-lo falhar em outro lugar.
Observe a linha include
comentou no exemplo de código acima.
NoMethodError: undefined method `clean_backtrace' for #<TitleTest:0x7fd895fadf00>
/test/unit/title_test.rb:7:in `test_routes'
clean_backtrace
é outro método de ensaio definido na ActionController :: :: testcase afirmações.
Eu não estou recebendo qualquer resultado google busca para estes erros - ninguém mais parece estar a ter este problema. O problema também ocorre se eu recriar o cenário em um aplicativo de trilhos recém-gerado. Eu não acho que eu deveria ter para incluir estes módulos em meus casos de teste. O que pode estar errado aqui?
Solução
Há uma lista de href="http://robots.thoughtbot.com/post/159805595/rails-2-3-2-upgrade-gotchas" Rails gotchas em robôs gigantes. Aparentemente, o teste de roteamento deve usar classe ActionController::TestCase
, não ActiveSupport::TestCase
.
Outras dicas
testes de roteamento deve ser feito como parte de testes de integração.
Estes podem ser gerados usando script/generate script/generate integration_test routes
Um exemplo:
class RoutesTest < ActionController::IntegrationTest
fixtures :all
def test_resources_route
assert_routing "titles/15", { :controller => "titles", :action => "show", :id => "15" }
end
end
O seu encaminhamento arquivo de teste de unidade tem de incluir o módulo ActionController::Assertions::RoutingAssertions
desde Rails 2.3.2.