129

背景:我在使用 Thoughtbot 的“Factory Girl”gem 时遇到了一些问题,它用于创建要在单元测试和其他测试中使用的对象。我想去控制台并运行不同的 Factory Girl 呼叫以查看发生了什么。例如,我想进去那里做...

>> Factory(:user).inspect

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

$ 脚本/控制台 RAILS_ENV=test

但是当我这样做时,工厂类不可用。看起来好像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。啊。

4

10 回答 10

207

对于 Rails < 3.0

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

我不确定您是否需要测试助手或者测试环境是否为您执行此操作,但是使用该命令您至少应该能够成功启动到测试环境。

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

对于 Rails 3 和 4

运行rails c testbundle exec如果您在当前应用程序环境中需要它,请预先添加。

对于 Rails 5 和 6

运行rails console -e test

于 2009-06-26T16:36:15.130 回答
61

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

于 2011-07-08T20:57:28.197 回答
11

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

rails c -e test
于 2018-11-03T02:30:44.987 回答
10
script/console test

应该是你所需要的。

于 2009-06-26T18:24:06.717 回答
4

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

rails c [environment]

例子

1) 用于分期

rails c staging

2) 用于生产

rails c production

来源和详细描述: Rails 命令行

于 2016-09-19T07:45:38.130 回答
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.

这是[环境]位。

于 2011-02-09T19:44:26.963 回答
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

于 2017-05-19T19:15:45.200 回答
1

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

config.gem "thoughtbot-factory_girl", :lib => "factory_girl", :source => "http://gems.github.com"
于 2009-06-26T16:54:23.457 回答
0

测试环境

rails console test # or just rails c test

开发环境

rails console # or just rails c
于 2016-04-14T07:30:00.177 回答
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
于 2019-04-18T11:07:21.107 回答