Teste trilhos rotas: não consegue encontrar ActionController :: Afirmações :: métodos RoutingAssertions

StackOverflow https://stackoverflow.com/questions/1806351

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top