Come eseguire la console Rails nell'ambiente di test e caricare test_helper.rb?


121

Il background: ho dei problemi con la gemma "Factory Girl" di Thoughtbot, che viene usata per creare oggetti da usare in unit e altri test. Vorrei andare sulla console ed eseguire diverse chiamate Factory Girl per vedere cosa sta succedendo. Ad esempio, mi piacerebbe entrare lì e fare ...

>> Factory(:user).inspect

So che puoi eseguire la console in ambienti diversi ...

$ script / console RAILS_ENV = test

Ma quando lo faccio, la classe Factory non è disponibile. Sembra che test_helper.rbnon venga caricato.

Ho provato varie requirechiamate, inclusa una con il percorso assoluto a, test_helper.rbma falliscono in modo simile a questo:

$ 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.


1
Di conseguenza, se avessi posizionato RAILS_ENV = test prima di script / console, avrebbe funzionato come ti aspetteresti.
Jared

Risposte:


192

Per Rails <3.0

Corri script/console --help. Noterai che la sintassi è script/console [environment], che nel tuo caso è script/console test.

Non sono sicuro se devi richiedere l'helper di test o se l'ambiente di test lo fa per te, ma con quel comando dovresti almeno essere in grado di eseguire l'avvio con successo nell'env di test.

Come nota a margine: è davvero strano che i vari binari in script / abbiano modi diversi di impostare l'ambiente rails.

Per binari 3 e 4

Corri rails c test. Aggiungi bundle execse necessario per l'ambiente dell'app corrente.

Per binari 5 e 6

Corri rails console -e test.


63
In rails 3, è solorails console [environment]
Idris Mokhtarzada

26
È un po 'incoerente perché per avviare il server digitirails server -e test
Jason

In Rails 5 funziona ancora. E devi caricare almeno alcune parti del tuo ambiente, nel mio caso features/support/helpers.rbnon è stato caricato automaticamente. Inoltre, Rack::Testnon viene caricato.
Derrell Durrett

61

In Rails 3, fai semplicemente rails console testo rails console productiono rails console development(che è l'impostazione predefinita).


10
script/console test

Dovrebbe essere tutto ciò di cui hai bisogno.


8

Per Rails 5.2.0: "Passare il nome dell'ambiente come argomento normale è deprecato e verrà rimosso nella prossima versione di Rails. Per favore, usa l'opzione -e invece."

rails c -e test

4

È possibile specificare l'ambiente in cui deve funzionare il comando della console.

rails c [environment]

Esempi

1) Per la messa in scena

rails c staging

2) Per la produzione

rails c production

Per fonte e descrizione dettagliata: The Rails Command Line


3

David Smith ha ragione, fallo e basta

script/console test

Il comando help mostrerà perché funziona:

$ 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.

È il bit [ambiente] .


2

Condivido il dolore del richiedente. Ci sono davvero tre domande separate qui, alcune delle quali sono affrontate, altre no:

  1. Come si avvia la console nell'ambiente di test?

    Per le versioni recenti di Rails bundle exec rails c test, o per le sintassi alternative.

  2. Come ci si assicura che test / test_helper.rb sia caricato in quella sessione della console?

    Qualcosa del genere require './test/test_helper'dovrebbe farlo.

    Per me, questo restituisce vero, indicando che non era già caricato quando ho avviato la console. Se quell'affermazione restituisce falso, hai appena sprecato un paio di battute, ma sei comunque a posto.

  3. Una volta caricato test_helper, come si chiamano i metodi definiti in esso?

    In un tipico test_helper, i metodi personalizzati sono generalmente definiti come metodi di istanza di ActiveSupport :: TestCase. Quindi, se vuoi chiamare uno di loro, hai bisogno di un'istanza di quella classe. Per tentativi ed errori, ActiveSupport :: TestCase.new ha un parametro richiesto, quindi ... passagli qualcosa.

    Se il tuo test_helper ha un metodo chiamato create_user, puoi invocarlo in questo modo: ActiveSupport::TestCase.new("no idea what this is for").create_user


Piuttosto che tentativi o errori, usa la guida API di rails per trovare ciò di cui ha bisogno api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... è probabilmente l'ordine di test che è :randomdi default
Mirv - Matt

Ci sono solo quei due metodi di classe descritti per ActiveSupport :: TestCase, quindi non sono chiaro su quale classe / modulo eredita il suo initializemetodo. Ma sembra che il parametro che si aspetta venga memorizzato come @NAMEsull'oggetto creato.
Nick Davies

1

Assicurati di aver installato il GEM e di aver aggiunto la seguente riga nel tuo file environment.rb o test.rb.

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

0

Test Env

rails console test # or just rails c test

Sviluppo Env

rails console # or just rails c

0

Il comando per eseguire l'ambiente di test della console rails è

rails c -e test

o

RAILS_ENV=test rails c

se stai affrontando un problema come

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

quindi dovresti prima preparare il tuo DB di prova eseguendo

bundle exec rake db:test:prepare
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.