2009-06-26 10 views
106

Lo sfondo: sto riscontrando qualche problema con la gemma "Factory Girl" di Thoughtbot, con cui viene utilizzato per creare oggetti da utilizzare in unità e altri test. Mi piacerebbe andare alla console e lanciare diverse chiamate di Factory Girl per verificare cosa sta succedendo. Ad esempio, mi piacerebbe andare in là sono fare ...Come eseguire la console di Rails nell'ambiente di test e caricare test_helper.rb?

>> Factory(:user).inspect 

So che è possibile eseguire la console in ambienti diversi ...

$ script/console RAILS_ENV = test

Ma quando lo faccio, la classe di fabbrica non è disponibile. Sembra che test_helper.rb non venga caricato.

Ho provato vari require chiamate cui uno con il percorso assoluto test_helper.rb ma non riescono 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 si fosse posto il RAILS_ENV = test prima script/console, avrebbe funzionato come ci si aspetterebbe . – Jared

risposta

165

Per Rails < 3,0

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

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

Come nota a margine: è davvero strano che i vari binari in script/dispongano di diversi modi per impostare l'ambiente delle rotaie.

per Rails 3 e 4

Run rails c test. Preportare bundle exec se necessario per l'ambiente corrente dell'app.

+60

In rails 3, è solo 'rails console [environment]' –

+26

È un po 'incoerente perché per avviare il server si digita 'rails server -e test' – Jason

+0

In Rails 5 funziona ancora. E, è necessario caricare almeno alcune parti del proprio ambiente - nel mio caso '' 'features/support/helpers.rb''' non è stato caricato automaticamente. Inoltre, '' 'Rack :: Test''' non è caricato. –

1

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

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

dovrebbe essere tutto il necessario.

3

David Smith è corretta, basta fare

script/console test 

Il comando help mostrerà il motivo per cui 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. 

E 'il bit [ambiente].

58

In Rails 3, solo fare rails console test o rails console production o rails console development (che è l'impostazione predefinita).

0

prova Env

rails console test # or just rails c test 

Developement Env

rails console # or just rails c 
3

È possibile specificare l'ambiente in cui il comando console dovrebbe operare.

rails c [environment] 

Esempi

1) per la stadiazione

rails c staging 

2) Per produzione

rails c production 

Per sorgente & descrizione dettagliata: The Rails Command Line

1

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

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

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

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

    Qualcosa come require './test/test_helper' dovrebbe farlo.

    Per me, questo restituisce true, a indicare che non era già caricato quando ho avviato la console. Se quell'affermazione restituisce false, hai appena sprecato un paio di sequenze di tasti, ma sei ancora a posto.

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

    In un tipico test_helper, i metodi personalizzati vengono in genere definiti come metodi di istanza di ActiveSupport :: TestCase. Quindi, se vuoi chiamarne uno, hai bisogno di un'istanza di quella classe. Per prova ed errore, ActiveSupport :: TestCase.new ha un parametro obbligatorio, quindi ... passa qualcosa.

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

+0

Piuttosto che tentativi o errori - usa la guida dell'API per trovare ciò di cui ha bisogno http://api.rubyonrails.org/classes/ActiveSupport/TestCase.html ...è probabilmente l'ordine di prova che è ': random' di default – Mirv

+0

Esistono solo quei due metodi di classe descritti per ActiveSupport :: TestCase, quindi non sono chiaro su quale classe/modulo erediti il ​​suo metodo' initialize' da. Ma sembra che il parametro che si aspetta venga memorizzato come '@ NAME' sull'oggetto creato. –

Problemi correlati