如何在测试环境中运行Rails控制台并加载test_helper.rb?

时间:2009-06-26 16:29:16

标签: ruby-on-rails ruby testing shoulda

背景:我遇到了Thoughtbot的“Factory Girl”宝石的一些问题,用于创建在单位和其他测试中使用的对象。我想去控制台并运行不同的Factory Girl电话来查看发生了什么。例如,我想进去那里......

>> Factory(:user).inspect

我知道你可以在不同的环境中运行控制台......

$ script / console 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

格儿。哎呀。

10 个答案:

答案 0 :(得分:177)

对于Rails< 3.0

运行script/console --help。您会注意到语法为script/console [environment],在您的情况下为script/console test

我不确定您是否需要测试帮助程序,或者测试环境是否适合您,但是使用该命令,您至少应该能够成功启动到测试环境中。

作为旁注:脚本中的各种二进制文件具有不同的设置rails环境的方式确实有点奇怪。

对于Rails 3和4

运行rails c test。如果您对当前的应用环境需要此功能,请前置bundle exec

对于Rails 5和6

运行rails console -e test

答案 1 :(得分:61)

在Rails 3中,只需执行rails console testrails console productionrails console development(这是默认设置)。

答案 2 :(得分:10)

script/console test

应该是你所需要的一切。

答案 3 :(得分:8)

对于Rails 5.2.0:“不建议将环境名称作为常规参数传递,并且将在下一个Rails版本中删除。请改为使用-e选项。”

rails c -e test

答案 4 :(得分:3)

David Smith是正确的,只是做

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.

这是 [环境] 位。

答案 5 :(得分:3)

您可以指定控制台命令应在其中运行的环境。

rails c [environment]

实施例

1)暂存

rails c staging

2)生产

rails c production

对于来源&详细说明:The Rails Command Line

答案 6 :(得分:2)

我分享了提问者的痛苦。这里有三个单独的问题,其中一些问题得到解决,一些问题没有解决:

  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的实例方法。因此,如果要调用其中一个,则需要该类的实例。通过反复试验,ActiveSupport :: TestCase.new有一个必需参数,所以......传递一些东西。

    如果你的test_helper有一个名为create_user的方法,你可以这样调用它: ActiveSupport::TestCase.new("no idea what this is for").create_user

答案 7 :(得分:1)

确保安装了GEM,并在environment.rb或test.rb文件中添加了以下行。

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

答案 8 :(得分:0)

测试环境

rails console test # or just rails c test

发展环境

rails console # or just rails c

答案 9 :(得分: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`

然后您首先应通过运行

准备测试数据库
bundle exec rake db:test:prepare