Como executar o console do Rails no ambiente de teste e carregar test_helper.rb?

121

O pano de fundo: estou tendo alguns problemas com a gema "Factory Girl" do Thoughtbot, que é usada para criar objetos para uso em testes unitários e outros. Eu gostaria de ir ao console e executar diferentes chamadas da Factory Girl para verificar o que está acontecendo. Por exemplo, eu gostaria de ir lá há fazer ...

>> Factory(:user).inspect

Eu sei que você pode executar o console em diferentes ambientes ...

$ script / console RAILS_ENV = teste

Mas quando faço isso, a classe Factory não está disponível. Parece que test_helper.rbnão está sendo carregado.

Eu tentei várias requirechamadas, incluindo uma com o caminho absoluto, test_helper.rbmas elas falham da mesma forma:

$ script/console RAILS_ENV=test
>> require '/Users/ethan/project/contactdb/test/test_helper.rb'
  Errno::ENOENT: No such file or directory - 
  /Users/ethan/project/contactdb/config/environments/RAILS_ENV=test.rb

Grr. Argh.

Ethan
fonte
1
Consequentemente, se você tivesse colocado o teste RAILS_ENV = antes do script / console, ele teria funcionado como seria de esperar.
Jared

Respostas:

192

Para Rails <3.0

Corra script/console --help. Você notará que a sintaxe é a script/console [environment]que, no seu caso, é script/console test.

Não tenho certeza se você precisa do auxiliar de teste ou se o ambiente de teste faz isso por você, mas com esse comando, você deve pelo menos conseguir inicializar com êxito no ambiente de teste.

Como nota de rodapé: É realmente meio estranho que os vários binários no script / tenham maneiras diferentes de definir o ambiente de rails.

Para os trilhos 3 e 4

Corra rails c test. Anexe antes bundle execse precisar para o ambiente atual do aplicativo.

Para os trilhos 5 e 6

Corra rails console -e test.

August Lilleaas
fonte
63
Nos trilhos 3, é apenasrails console [environment]
Idris Mokhtarzada
26
É um pouco inconsistente porque, para iniciar o servidor, você digitarails server -e test
Jason
No Rails 5, isso ainda funciona. E você precisa carregar pelo menos algumas partes do seu ambiente - no meu caso, features/support/helpers.rbnão foi carregado automaticamente. Além disso, Rack::Testnão está carregado.
Derrell Durrett
61

No Rails 3, basta fazer rails console testou rails console productionou rails console development(que é o padrão).

sivabudh
fonte
10
script/console test

Deve ser tudo que você precisa.

David Smith
fonte
8

Para o Rails 5.2.0: "Passar o nome do ambiente como argumento regular foi descontinuado e será removido na próxima versão do Rails. Por favor, use a opção -e."

rails c -e test
Tovi Newman
fonte
4

Você pode especificar o ambiente em que o comando do console deve operar.

rails c [environment]

Exemplos

1) Para estadiamento

rails c staging

2) Para Produção

rails c production

Para fonte e descrição detalhada: The Rails Command Line

Aamir
fonte
3

David Smith está correto, apenas faça

script/console test

O comando help mostrará por que isso funciona:

$ script/console -h
Usage: console [environment] [options]
    -s, --sandbox                    Rollback database modifications on exit.
        --irb=[irb]                  Invoke a different irb.
        --debugger                   Enable ruby-debugging for the console.

É o pouco [ambiente] .

Purplejacket
fonte
2

Eu compartilho a dor do autor. Há realmente três perguntas separadas aqui, algumas das quais são abordadas, outras não:

  1. Como você inicia o console no ambiente de teste?

    Para versões recentes do Rails bundle exec rails c test, ou sintaxes alternativas para isso.

  2. Como você garante que test / test_helper.rb seja carregado nessa sessão do console?

    Algo como require './test/test_helper'deveria fazê-lo.

    Para mim, isso retorna true, indicando que ainda não estava carregado quando iniciei o console. Se essa declaração retornar falsa, você apenas desperdiçou algumas teclas, mas ainda está pronto.

  3. Depois que o test_helper é carregado, como você chama os métodos definidos nele?

    Em um test_helper típico, os métodos personalizados geralmente são definidos como métodos de instância do ActiveSupport :: TestCase. Portanto, se você quiser chamar um deles, precisará de uma instância dessa classe. Por tentativa e erro, o ActiveSupport :: TestCase.new possui um parâmetro necessário, então ... passe algo.

    Se o seu test_helper tiver um método chamado create_user, você poderá invocá-lo desta maneira: ActiveSupport::TestCase.new("no idea what this is for").create_user

Nick Davies
fonte
Em vez de tentativa ou erro - use o guia da API do rails para encontrar o que ele precisa api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... provavelmente é a ordem de teste que é :randompor padrão
Mirv - Matt
Existem apenas esses dois métodos de classe descritos para o ActiveSupport :: TestCase, por isso não estou claro de que classe / módulo ele herda seu initializemétodo. Mas parece que o parâmetro esperado é armazenado como @NAMEno objeto criado.
Nick Davies
1

Verifique se você instalou o GEM e se adicionou a seguinte linha no arquivo environment.rb ou test.rb.

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"
Simone Carletti
fonte
0

Teste Env

rails console test # or just rails c test

Desenvolvimento Env

rails console # or just rails c
anyavacy
fonte
0

O comando para executar o ambiente de teste do console do Rails é

rails c -e test

ou

RAILS_ENV=test rails c

se você estiver enfrentando problemas, algo como

ActiveRecord::StatementInvalid:
   Mysql2::Error: Table 'DB_test.users' doesn't exist: SHOW FULL FIELDS FROM `users`

então você deve primeiro preparar seu banco de dados de teste executando

bundle exec rake db:test:prepare
Touseef Murtaza
fonte