Testes de desempenho dos trilhos "Teste de rake: benchmark" e "teste de rake: perfil" me dê erros
-
23-09-2019 - |
Pergunta
Estou tentando executar um teste de desempenho padrão em branco com o Ruby 1.9 e o Rails 2.3.5 e simplesmente não consigo fazer funcionar! O que estou perdendo aqui???
rails testapp
cd testapp
script/generate scaffold User name:string
rake db:migrate
rake test:benchmark
-
/usr/local/bin/ruby19 -I"lib:test" "/usr/local/lib/ruby19/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/performance/browsing_test.rb" -- --benchmark
Loaded suite /usr/local/lib/ruby19/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader
Started
/usr/local/lib/ruby19/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:105:in `rescue in const_missing': uninitialized constant BrowsingTest::STARTED (NameError)
from /usr/local/lib/ruby19/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:94:in `const_missing'
from /usr/local/lib/ruby19/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/testing/performance.rb:38:in `run'
from /usr/local/lib/ruby19/1.9.1/minitest/unit.rb:415:in `block (2 levels) in run_test_suites'
from /usr/local/lib/ruby19/1.9.1/minitest/unit.rb:409:in `each'
from /usr/local/lib/ruby19/1.9.1/minitest/unit.rb:409:in `block in run_test_suites'
from /usr/local/lib/ruby19/1.9.1/minitest/unit.rb:408:in `each'
from /usr/local/lib/ruby19/1.9.1/minitest/unit.rb:408:in `run_test_suites'
from /usr/local/lib/ruby19/1.9.1/minitest/unit.rb:388:in `run'
from /usr/local/lib/ruby19/1.9.1/minitest/unit.rb:329:in `block in autorun'
rake aborted!
Command failed with status (1): [/usr/local/bin/ruby19 -I"lib:test" "/usr/l...]
Outras dicas
OK, o problema é que o Ruby 1.8 usou o teste :: unidade como sua biblioteca de testes padrão. No Ruby 1.9, que mudou para o MinITest.
Versões do ActiveSupport antes de 3.1.0 Teste :: Unidade assumida. Parece que foi abordado em 3.1.0 e posterior. Se você estiver usando o Rails 3.0.9, ele depende do ActiveSupport 3.0.9, para que você não possa pedir versões posteriores no seu GemFile.
Encontrado isto via Google. Aparentemente, a biblioteca Test :: Unit ainda está disponível, mas como uma jóia chamada 'Test-Unit'.
Então, no meu gemfile no topo antes da jóia do Rails, eu coloquei:
gem 'test-unit', '~> 2.3.0'
Então eu fiz o teste de rake: benchmark e funcionou!
Eu acho que é um bug. Sou capaz de executar o código com o Ruby 1.8.6 (2008-08-11 Patchlevel 287) [Universal-Darwin9.0]. Sob Ruby 1.9.1, recebo uma exceção como a que você descreve.
Quando chega ao ActiveSupport :: Testing :: Performance#Run (em Rails), causa uma exceção na linha yield(self.class::STARTED, name)
onde tenta encontrar a constante :: start. Ruby Proft também tem um método semelhante, em Rubyprof :: Test#Run.
Não sei quem é o culpado aqui.