Pergunta

Sempre que executo testes rspec para meu aplicativo Rails, leva uma eternidade e um dia de sobrecarga antes que ele realmente comece a executar os testes.Por que o rspec é tão lento?Existe uma maneira de acelerar o carregamento inicial do Rails ou destacar a parte do meu aplicativo Rails que preciso (por exemplo,Somente material do ActiveRecord) para que ele não carregue absolutamente tudo para executar alguns testes?

Foi útil?

Solução

Você deve ser capaz de acelerar seu script/spec chamadas executando script/spec_server em uma janela de terminal separada e, em seguida, adicionando o adicional -X parâmetro para suas chamadas de especificação.

Outras dicas

Definitivamente, sugiro dar uma olhada no spork.

http://spork.rubyforge.org/

O railstutorial aborda especificamente isso e fornece uma solução alternativa para fazer o spork funcionar bem no Rails 3.0 (no momento, o spork não está pronto para o Rails 3).Claro, se você não está no Rails 3.0, então você deve estar pronto.

A parte do tutorial que mostra como fazer o spork rodar no Rails 3.0

http://railstutorial.org/chapters/static-pages#sec:spork

Verificando quando o spork está pronto para o Rails 3.0

http://www.railsplugins.org/plugins/440-spork

Por que o rspec é tão lento? porque carrega todo o ambiente, carrega equipamentos e todo aquele jazz.

Existe uma maneira de acelerar o carregamento inicial do Rails você pode tentar usar simulações em vez de confiar no banco de dados. Isso é realmente correto para testes de unidade e definitivamente acelerará seus testes de unidade.Além disso, usando o servidor de especificações mencionado por @Scott Matthewman pode ajudar, o mesmo acontece com o autoteste do zentest mencionado por @Marc-André Lafortune

Existe uma maneira de destacar a parte do meu aplicativo Rails que preciso (por exemploSomente material do ActiveRecord) para que ele não carregue absolutamente tudo para executar alguns testes? e quanto a isso

rake test:recent 

Não tenho certeza de como a tarefa rspec se integra a isso, mas você definitivamente poderia usar a tarefa test:recent como modelo para fazer o mesmo com os testes rspec, se o.

rake test:rspec:recent

ainda não existe

porque carrega todo o ambiente, carrega equipamentos e todo aquele jazz.

O verdadeiro culpado é se você executá-lo usando rake spec, ele executa o db:test:prepare tarefa.

Esta tarefa elimina todo o seu banco de dados de teste e o recria do zero.Isso parece ridículo para mim, mas é o que acontece (a mesma coisa acontece quando você executa rake:test:units etc).

Você pode facilmente contornar isso usando o spec aplicativo que o rspec instala como parte do gem rspec.

Assim:

cd railsapp
spec spec # run all specs without rebuilding the whole damn database
spec spec/models # run model specs only

cd spec
spec controllers/user* # run specs for controllers that start with user

Acho que a experiência "zen" que você procura é correr spec_server e autospec em segundo plano, resultando em testes quase instantâneos quando você salva um arquivo.

No entanto, estou tendo problemas para comunicar esses dois programas.

encontrei uma explicação aqui:

Percebi que o autoteste não envia comandos para o spec_server.Em vez disso, ele recarrega todo o ambiente do Rails e os plugins do seu aplicativo sempre que ele é executado.Isso faz com que o AutoTest seja executado significativamente mais lento que o servidor de script, porque quando você executa o comando Script/Spec, as especificações são enviadas para o SPEC_SERVER, que já possui seu ambiente de Rails acionado e pronto para ir.Se você instalar um novo plug -in ou algo parecido, precisará reiniciar o SPEC_SERVER.

Mas, como podemos resolver esse problema?Suponho que isso envolveria baixar o ZenTest e alterar o código do autotest programa, mas não tenho tempo para experimentá-lo agora.

Você está executando isso no Rails?Nesse caso, não é a inicialização do RSpec que é lenta, é a do Rails.Rails tem que inicializar toda a base de código e o seu antes de executar as especificações.Bem, isso não ter para, mas acontece.O RSpec funciona muito rápido para mim em meus pequenos projetos não-rails.

A execução de testes pode ser muito lenta porque todo o ambiente Rails precisa ser carregado (tente o script/console) e só então todos os testes podem ser executados.Você deveria usar auto teste que mantém o ambiente carregado e verificará quais arquivos você edita.Ao editar e salvar um arquivo, apenas os testes que dependem dele serão executados de forma automática e rápida.

Se você estiver usando um Mac, recomendo usar o Rspactor em vez do autoteste, pois ele usa muito menos recursos para pesquisar arquivos alterados do que o autoteste.Existe uma versão completa do Cocoa

RSpactor.app

ou a versão gem que mantenho em GitHub

sudo gem install pelle-rspactor

Embora eles não acelerem os testes de rspec individuais, eles parecem muito mais rápidos, pois executam automaticamente as especificações afetadas um segundo depois de você clicar em salvar.

A partir do rspec-rails-1.2.7, spec_server está obsoleto em favor da gem spork.

A principal razão é que require leva para sempre no Windows, por algum motivo.

Dicas para aceleração:spork agora funciona com Windows, eu acredito.

Você pode tentar "faster_require", que armazena locais em cache:

http://github.com/rdp/faster_require

G.L.-rp

Se você estiver em um ambiente Windows, provavelmente há pouco que você possa fazer, pois o Rails parece inicializar muito lentamente no Windows.Tive a mesma experiência no Windows e tive que mover minha configuração para uma VM Linux para torná-la realmente rápida (eu também estava usando o autoteste).

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