テスト環境でRailsコンソールを実行してtest_helper.rbをロードする方法は?


121

背景:Thoughtbotの「Factory Girl」gemで問題が発生しています。これは、ユニットやその他のテストで使用するオブジェクトの作成に使用されます。コンソールに行って、何が起こっているのかを確認するために、さまざまなFactory Girl呼び出しを実行したいと思います。たとえば、私はそこに行きたいです...

>> Factory(:user).inspect

さまざまな環境でコンソールを実行できることを知っています...

$スクリプト/コンソールRAILS_ENV = test

しかし、その場合、Factoryクラスは利用できません。test_helper.rbロードされていないようです。

requireの絶対パスを含むさまざまな呼び出しを試しましたtest_helper.rbが、次のように失敗します。

$ 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。ああ。


1
したがって、スクリプト/コンソールの前にRAILS_ENV = testを配置した場合は、期待どおりに機能します。
ジャレド

回答:


192

Rails <3.0の場合

を実行しますscript/console --help。構文がscript/console [environment]であることがわかりますscript/console test

テストヘルパーが必要かどうか、またはテスト環境がそれを行う必要があるかどうかはわかりませんが、そのコマンドを使用すると、少なくともテスト環境で正常に起動できるはずです。

補足として:script /のさまざまなバイナリがrails環境を設定する異なる方法を持っているのは確かに奇妙なことです。

Rails 3および4の場合

を実行しますrails c testbundle exec現在のアプリ環境でこれが必要な場合は、先頭に追加します。

Rails 5および6の場合

を実行しますrails console -e test


63
レール3では、それだけですrails console [environment]
Idris Mokhtarzada

26
入力したサーバーを起動するために少し矛盾していますrails server -e test
Jason

Rails 5ではこれはまだ機能します。また、環境の少なくとも一部をロードする必要があります-私の場合、features/support/helpers.rb自動的にロードされませんでした。また、Rack::Test読み込まれていません。
デレルダレット

61

Rails 3では、単にrails console testor rails console productionまたはrails console development(これがデフォルトです)を実行します。



8

Rails 5.2.0の場合:「環境の名前を通常の引数として渡すことは非推奨であり、次のRailsバージョンでは削除されます。代わりに-eオプションを使用してください。」

rails c -e test

4

consoleコマンドが動作する環境を指定できます。

rails c [environment]

1)ステージング用

rails c staging

2)生産用

rails c production

ソースと詳細な説明: Railsコマンドライン


3

デビッド・スミスは正しい、ただやる

script/console test

helpコマンドは、これが機能する理由を示します。

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

それは[環境]ビットです。


2

質問者の痛みを共有します。ここには実際には3つの個別の質問があり、そのうちのいくつかは対処されていますが、いくつかは対処されていません。

  1. テスト環境でコンソールをどのように起動しますか?

    最近のRailsバージョンの場合bundle exec rails c test、またはそのための代替構文。

  2. test / test_helper.rbがコンソールセッションにロードされていることをどのように確認しますか?

    のような何かrequire './test/test_helper'がそれを行うべきです。

    私にとっては、これはtrueを返し、コンソールを起動したときにまだロードされていなかったことを示しています。そのステートメントがfalseを返す場合、キーストロークをいくつか無駄にしただけですが、それでも問題ありません。

  3. test_helperがロードされたら、それに定義されているメソッドをどのように呼び出しますか?

    典型的なtest_helperでは、カスタムメソッドは通常、ActiveSupport :: TestCaseのインスタンスメソッドとして定義されます。したがって、それらの1つを呼び出す場合は、そのクラスのインスタンスが必要です。試行錯誤により、ActiveSupport :: TestCase.newには必須パラメーターが1つあるため、...何かを渡します。

    test_helperにcreate_userと呼ばれるメソッドがある場合、次の方法で呼び出すことができます。 ActiveSupport::TestCase.new("no idea what this is for").create_user


試行錯誤ではなく、rails APIガイドを使用して、必要なものを見つけますapi.rubyonrails.org/classes/ActiveSupport/TestCase.html ...おそらく:randomデフォルトであるテスト注文です
Mirv-Matt

ActiveSupport :: TestCaseについて説明されているクラスメソッドは2つしかないため、initializeメソッドを継承するクラス/モジュールは不明です。しかし、予想されるパラメータは@NAME、作成されたオブジェクトのように格納されるようです。
Nick Davies 2017年

1

GEMをインストールし、environment.rbまたはtest.rbファイルに次の行を追加したことを確認してください。

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

0

テスト環境

rails console test # or just rails c test

開発環境

rails console # or just rails c

0

Railsコンソールのテスト環境を実行するコマンドは

rails c -e test

または

RAILS_ENV=test rails c

あなたが何かのような問題に直面しているなら

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

次に、最初に実行してテストDBを準備する必要があります

bundle exec rake db:test:prepare
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.