web-dev-qa-db-ja.com

テスト環境でRails consoleを実行し、test_helper.rbをロードするには?

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

>> Factory(:user).inspect

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

$ script/console Rails_ENV = test

しかし、それを行うと、Factoryクラスは使用できません。 test_helper.rbがロードされていないようです。

test_helper.rbへの絶対パスを含む呼び出しを含むさまざまなrequire呼び出しを試みましたが、これらは同様に失敗します。

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

117
Ethan

For Rails <3.

script/console --helpを実行します。構文がscript/console [environment]であることに気付くでしょう。この場合、script/console testです。

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

サイドノートとして:script /のさまざまなバイナリがRails環境を設定するさまざまな方法を持っているのは確かに奇妙なことです。

For Rails 3 and 4の場合

Rails c testを実行します。現在のアプリ環境で必要な場合は、bundle execを追加します。

For Rails 5 and 6の場合

Rails console -e testを実行します。

178
August Lilleaas

Rails 3で、単にRails console test または Rails console production または Rails console development(これがデフォルトです)。

61
sivabudh
script/console test

必要なものはすべて揃っているはずです。

10
David Smith

For Rails 5.2.0: "通常の引数として環境名を渡すことは推奨されておらず、次のRailsバージョンで削除されます。代わりにeオプション。」

Rails c -e test
8
Tovi Newman

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

Rails c [environment]

1)ステージングの場合

Rails c staging

2)生産用

Rails c production

ソースと詳細な説明: The Rails Command Line

4
Aamir

デビッド・スミスは正しいです

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.

[environment]ビットです。

3
Purplejacket

質問者の痛みを共有します。ここには、実際には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

2
Nick Davies

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

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

テスト環境

Rails console test # or just Rails c test

開発環境

Rails console # or just Rails c
0
anyavacy

実行するコマンド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
0
Touseef Murtaza