Test ortamında Rails konsolu nasıl çalıştırılır ve test_helper.rb nasıl yüklenir?


121

Arka plan: Thoughtbot'un "Factory Girl" mücevheri ile bazı problemler yaşıyorum, ünitede ve diğer testlerde kullanılacak nesneler oluşturmak için kullanılır. Ne olduğunu kontrol etmek için konsola gidip farklı Fabrika Kızı aramaları yapmak istiyorum. Örneğin, oraya gitmek istiyorum ...

>> Factory(:user).inspect

Konsolu farklı ortamlarda çalıştırabileceğinizi biliyorum ...

$ komut dosyası / konsol RAILS_ENV = test

Ama bunu yaptığımda Fabrika sınıfı mevcut değil. Görünüşe göre test_helper.rbyüklenmiyor.

requireMutlak yol dahil olmak üzere çeşitli çağrılar denedim , test_helper.rbancak buna benzer şekilde başarısız oldular:

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


1
Sonuç olarak, RAILS_ENV = testini komut dosyası / konsoldan önce yerleştirmiş olsaydınız, beklediğiniz gibi çalışırdı.
Jared

Yanıtlar:


192

Raylar için <3.0

Çalıştır script/console --help. Sözdiziminin script/console [environment]sizin durumunuzda olduğunu fark edeceksiniz script/console test.

Test yardımcısına ihtiyacınız olup olmadığından veya test ortamının bunu sizin için yapıp yapmadığından emin değilim, ancak bu komutla en azından test ortamına başarılı bir şekilde önyükleme yapabilmelisiniz.

Bir yan not olarak: Komut dosyasındaki çeşitli ikili dosyaların ray ortamını ayarlamak için farklı yollara sahip olması gerçekten biraz tuhaf.

Raylar 3 ve 4 için

Çalıştır rails c test. bundle execMevcut uygulama ortamı için buna ihtiyacınız varsa başa ekleyin .

Raylar 5 ve 6 için

Çalıştır rails console -e test.


63
3. raylarda, sadecerails console [environment]
Idris Mokhtarzada

26
Bu biraz tutarsız çünkü yazdığınız sunucuyu başlatmak içinrails server -e test
Jason

Rails 5'te bu hala çalışıyor. Ve ortamınızın en azından bazı kısımlarını yüklemeniz gerekiyor - benim durumumda otomatik features/support/helpers.rbolarak yüklenmemişti. Ayrıca Rack::Testyüklenmemiş.
Derrell Durrett

61

Rails 3'te, rails console testveya rails console productionveya rails console development(varsayılandır) yapın.



8

Rails 5.2.0 için: "Ortamın adının normal bir bağımsız değişken olarak aktarılması artık kaldırılmıştır ve sonraki Rails sürümünde kaldırılacaktır. Lütfen bunun yerine -e seçeneğini kullanın."

rails c -e test

4

Konsol komutunun çalışması gereken ortamı belirtebilirsiniz.

rails c [environment]

Örnekler

1) Evreleme için

rails c staging

2) Üretim İçin

rails c production

Kaynak ve ayrıntılı açıklama için: Rails Komut Satırı


3

David Smith haklı, sadece yap

script/console test

Yardım komutu bunun neden işe yaradığını gösterecektir:

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

Bu [çevre] biti.


2

Sorunun acısını paylaşıyorum. Burada gerçekten üç ayrı soru var, bunlardan bazıları ele alınmış, bazıları değil:

  1. Konsolu test ortamında nasıl başlatırsınız?

    En son Rails sürümleri bundle exec rails c testveya bunun için alternatif sözdizimleri için.

  2. Test / test_helper.rb'nin bu konsol oturumuna yüklendiğinden nasıl emin olursunuz?

    Yapması require './test/test_helper'gereken gibi bir şey .

    Benim için bu, konsolu başlattığımda halihazırda yüklenmediğini belirten true döndürüyor. Bu ifade yanlış döndürürse, birkaç tuş vuruşunu boşa harcamışsınızdır, ancak yine de devam edebilirsiniz.

  3. Test_helper yüklendikten sonra, içinde tanımlanan yöntemleri nasıl çağırırsınız?

    Tipik bir test_helper'da, özel yöntemler tipik olarak ActiveSupport :: TestCase'in örnek yöntemleri olarak tanımlanır. Yani onlardan birini aramak istiyorsanız, o sınıfın bir örneğine ihtiyacınız var. Deneme yanılma yoluyla, ActiveSupport :: TestCase.new'in gerekli bir parametresi vardır, bu yüzden ... ona bir şey iletin.

    Test_helper öğenizin create_user adında bir yöntemi varsa, bunu şu şekilde çağırabilirsiniz: ActiveSupport::TestCase.new("no idea what this is for").create_user


Deneme veya yanılma yerine - neye ihtiyacı olduğunu bulmak için rails API kılavuzunu kullanın api.rubyonrails.org/classes/ActiveSupport/TestCase.html ... bu muhtemelen :randomvarsayılan olarak test sırasıdır
Mirv - Matt

ActiveSupport :: TestCase için açıklanan yalnızca bu iki sınıf yöntemi vardır, bu nedenle initializeyöntemini hangi sınıftan / modülden miras aldığını bilmiyorum . Ancak beklediği parametrenin @NAMEoluşturulan nesnede olduğu gibi saklanacağı görülüyor.
Nick Davies

1

GEM'i kurduğunuzdan ve aşağıdaki satırı environment.rb veya test.rb dosyanıza eklediğinizden emin olun.

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

0

Test Ortamı

rails console test # or just rails c test

Geliştirme Ortamı

rails console # or just rails c

0

Raylar konsolu test ortamını çalıştırma komutu

rails c -e test

veya

RAILS_ENV=test rails c

eğer bir sorunla karşı karşıya kalırsan

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

o zaman önce test DB'nizi çalıştırarak hazırlamalısınız.

bundle exec rake db:test:prepare
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.