Como executar um único teste em um conjunto de testes de trilhos?


Respostas:


158

NOTA: Isso não executa o teste via rake. Portanto, qualquer código que você possui RakefileNÃO será executado.

Para executar um único teste, use o seguinte comando no diretório principal do seu projeto Rails:

ruby -I test test/unit/my_model_test.rb -n test_name

Isso executa um único teste chamado "nome", definido na classe MyModelTest no arquivo especificado. O nome_da_teste é formado usando o nome do teste, acrescentando-o com a palavra "teste" e depois separando as palavras com sublinhados. Por exemplo:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

Você pode executar os dois testes via:

ruby -I test test/unit/my_model_test.rb

e apenas o segundo teste via

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes

4
Isso não funciona para mim (em testes funcionais ou unitários). Eu entendo 0 tests, 0 assertions, 0 failures, 0 errors. Rails 3.0.7.
B Seven

10
Eu pessoalmente sou um fã da forma regex: -n "/good/". A fuga de shell é sempre divertida, então eu costumo seguir expressões simples, mas é muito mais fácil do que escrever o nome completo do teste o tempo todo.
Groxx

4
É importante observar que, para que isso funcione, você não deve estar no diretório MAIN conforme especificado na resposta, mas no subdiretório que contém a test/pasta. Por exemplo, se eu quiser executar o teste activesupport/test/core_ext/array_ext_test.rb, devo entrar activesupport/primeiro.
Vincent B.

3
@Groxx - Finalmente uma solução! Obrigado! -n "/good/"trabalhou.
B Seven

Tenha cuidado ao executar isso em 2018+. Ele ignora algumas tarefas de teste incorporadas aos trilhos (como db: test: prepare) que são usadas para muitas coisas, como trocar dados locais por dados de fixação e restaurá-los novamente. A execução disso surpreendeu meu banco de dados local. Considere uma solução que use as tarefas de teste de trilhos internos, como stackoverflow.com/a/47006811/1154642 (que funcionou para mim).
Bryanbraun 15/09/19

99

Execute um arquivo de teste :

rake test TEST=tests/functional/accounts_test.rb

Execute um único teste em um arquivo de teste:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(Do comentário de @Puhlze.)


10
Além disso, se você quiser executar um único teste no arquivo fornecido, poderá adicionar uma var do ambiente TESTOPTS que será passada para o teste. EG ancinho teste test = testes / funcionais / accounts_test.rb TESTOPTS = "- n / d contas pagas /"
Puhlze

1
se este não funciona comando de teste, tente rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"(encerrando /paid accounts/com aspas simples)
RRW


38

Para trilhos 5:

rails test test/models/my_model.rb

9
Mas isso funciona todos os casos de teste no arquivo, a questão pede para executar um único teste ...
user000001

Você pode executar um único teste anexando um número de linha a um nome de arquivo:bin/rails test test/models/user_test.rb:27
Segfault

29

Graças a @ James, a resposta parece ser:

rails test test/models/my_model.rb:22

Assumindo 22 é o número da linha do teste fornecido. De acordo com os trilhos de ajuda:

 $ rails test --help

Você pode executar um único teste anexando um número de linha a um nome de arquivo:

    bin/rails test test/models/user_test.rb:27

Além disso, observe que seu teste deve herdar de ActionDispatch :: IntegrationTest para que isso funcione (esse foi meu erro):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
Essa parece ser a melhor resposta baseada nos guias do Rails, pelo menos para testar uma linha específica.
tfantina


5

Para executar um único teste no pacote Rails real:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb

3

Essa foi uma pergunta boba da meia-noite minha. O Rails gentilmente imprime o comando que está executando rake test. O resto é um exercício de recortar e colar.

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"


2

Se você deseja executar um único teste, basta executá-los como um script Ruby comum

ruby actionmailer/test/mail_layout_test.rb

Você também pode executar um conjunto inteiro (por exemplo, ActiveRecord ou ActionMailer) inserindo cdo diretório e executando rake testdentro dele.


1
Não no Rails - pelo menos não com os arquivos de teste padrão gerados. Eles "exigem 'test_helper'" na primeira linha, mas o caminho do carregamento não será configurado a tempo. Se você alterar cada primeira linha para um requisito explícito ("exigir File.join (File.dirname ( FILE ), '..', 'test_helper')"), sua solução funcionará.
James A. Rosen

ahem, isso érequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen

@Gaius Verificado duas vezes. O primeiro não funciona, mas cdsim. Só para esclarecer (não tenho certeza se estou lendo isso errado, mas você disse "arquivos de teste gerados"), isso é para a própria biblioteca do Rails, não para um projeto do Rails.
Aupajo

2

Na minha situação, rakesó funciona TESTOPTS="-n='/sample/'":

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"

0

Primeiro, acesse a pasta da lib que você deseja testar (isso é importante) e depois execute:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 

0

Pasta Rails

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

Observe que você precisa carregar a pasta apropriada: "activerecord / test" (onde você tem o teste)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.