Bagaimana cara menjalankan konsol Rails di lingkungan pengujian dan memuat test_helper.rb?

121

Latar belakang: Saya mengalami beberapa masalah dengan permata "Factory Girl" Thoughtbot, dengan digunakan untuk membuat objek untuk digunakan dalam unit dan tes lainnya. Saya ingin pergi ke konsol dan menjalankan panggilan Factory Girl yang berbeda untuk memeriksa apa yang terjadi. Misalnya, saya ingin masuk ke sana do ...

>> Factory(:user).inspect

Saya tahu bahwa Anda dapat menjalankan konsol di lingkungan yang berbeda ...

$ script / konsol RAILS_ENV = tes

Tapi saat saya melakukannya, kelas Pabrik tidak tersedia. Sepertinya test_helper.rbtidak dimuat.

Saya mencoba berbagai requirepanggilan termasuk satu dengan jalur absolut test_helper.rbtetapi gagal serupa dengan ini:

$ 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
sumber
1
Akibatnya jika Anda telah menempatkan tes RAILS_ENV = sebelum skrip / konsol, itu akan bekerja seperti yang Anda harapkan.
Jared

Jawaban:

192

Untuk Rails <3.0

Lari script/console --help. Anda akan melihat bahwa sintaksnya adalah script/console [environment], yang dalam kasus Anda adalah script/console test.

Saya tidak yakin apakah Anda harus meminta pembantu tes atau jika lingkungan pengujian melakukannya untuk Anda, tetapi dengan perintah itu Anda setidaknya harus bisa boot dengan sukses ke dalam tes env.

Sebagai catatan samping: Memang agak aneh bahwa berbagai binari dalam skrip / memiliki cara yang berbeda untuk mengatur lingkungan rel.

Untuk Rails 3 dan 4

Lari rails c test. Tambahkan di awal bundle execjika Anda memerlukan ini untuk lingkungan aplikasi saat ini.

Untuk Rails 5 dan 6

Lari rails console -e test.

Agustus Lilleaas
sumber
63
Di rel 3, hanyarails console [environment]
Idris Mokhtarzada
26
Ini sedikit tidak konsisten karena untuk memulai server yang Anda ketikrails server -e test
Jason
Di Rails 5 ini masih berfungsi. Dan, Anda perlu memuat setidaknya beberapa bagian dari lingkungan Anda - dalam kasus saya features/support/helpers.rbtidak dimuat secara otomatis. Juga, Rack::Testtidak dimuat.
Derrell Durrett
61

Di Rails 3, lakukan saja rails console testatau rails console productionatau rails console development(yang merupakan default).

sivabudh.dll
sumber
10
script/console test

Harus menjadi semua yang Anda butuhkan.

David Smith
sumber
8

Untuk Rails 5.2.0: "Meneruskan nama lingkungan sebagai argumen biasa tidak digunakan lagi dan akan dihapus di versi Rails berikutnya. Silakan, gunakan opsi -e sebagai gantinya."

rails c -e test
Tovi Newman
sumber
4

Anda dapat menentukan lingkungan tempat perintah konsol harus beroperasi.

rails c [environment]

Contoh

1) Untuk Pementasan

rails c staging

2) Untuk Produksi

rails c production

Untuk sumber & penjelasan rinci: Baris Perintah Rails

Aamir
sumber
3

David Smith benar, lakukan saja

script/console test

Perintah bantuan akan menunjukkan mengapa ini berfungsi:

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

Ini adalah bagian [lingkungan] .

Purplejacket
sumber
2

Saya berbagi rasa sakit yang ditanyakan. Sebenarnya ada tiga pertanyaan terpisah di sini, beberapa di antaranya dibahas, beberapa tidak:

  1. Bagaimana Anda memulai konsol di lingkungan pengujian?

    Untuk versi Rails terbaru bundle exec rails c test, atau sintaks alternatif untuk itu.

  2. Bagaimana Anda memastikan bahwa test / test_helper.rb dimuat ke sesi konsol itu?

    Sesuatu seperti require './test/test_helper' harus melakukannya.

    Bagi saya, ini mengembalikan nilai true, menunjukkan bahwa itu belum dimuat ketika saya memulai konsol. Jika pernyataan itu kembali salah, maka Anda hanya menyia-nyiakan beberapa penekanan tombol, tetapi Anda masih baik-baik saja.

  3. Setelah test_helper dimuat, bagaimana Anda memanggil metode yang ditentukan di dalamnya?

    Dalam test_helper biasa, metode kustom biasanya didefinisikan sebagai metode instance ActiveSupport :: TestCase. Jadi jika Anda ingin memanggil salah satunya, Anda memerlukan instance dari kelas itu. Dengan trial and error, ActiveSupport :: TestCase.new memiliki satu parameter yang diperlukan, jadi ... berikan sesuatu.

    Jika test_helper Anda memiliki metode yang disebut create_user, Anda dapat memanggilnya dengan cara ini: ActiveSupport::TestCase.new("no idea what this is for").create_user

Nick Davies
sumber
Daripada coba-coba - gunakan panduan API rel untuk menemukan apa yang dibutuhkan api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... itu mungkin urutan uji yang secara :randomdefault
Mirv - Matt
Hanya ada dua metode kelas yang dijelaskan untuk ActiveSupport :: TestCase, jadi saya tidak jelas tentang kelas / modul apa yang mewarisi initializemetodenya. Tapi sepertinya parameter yang diharapkan disimpan seperti @NAMEpada objek yang dibuat.
Nick Davies
1

Pastikan Anda menginstal GEM dan Anda menambahkan baris berikut di file environment.rb atau test.rb Anda.

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

Uji Env

rails console test # or just rails c test

Pengembangan Env

rails console # or just rails c
anyavacy
sumber
0

Perintah untuk menjalankan lingkungan pengujian konsol rel adalah

rails c -e test

atau

RAILS_ENV=test rails c

jika Anda menghadapi masalah seperti

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

maka Anda harus terlebih dahulu mempersiapkan DB pengujian Anda dengan menjalankan

bundle exec rake db:test:prepare
Touseef Murtaza
sumber