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

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

>> Factory(:user).inspect

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

脚本/控制台 RAILS _ ENV = 测试

但是当我这样做时,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

呃,啊。

106753 次浏览

对于 Rails < 3.0

运行 script/console --help。您会注意到语法是 script/console [environment],在您的例子中是 script/console test

我不确定您是否需要测试助手,或者测试环境是否为您做了这些,但是使用这个命令,您至少应该能够成功地引导到测试 env 中。

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

用于 Rails 3和 Rails 4

运行 rails c test。如果您需要当前应用程序环境中的 bundle exec,请在前面加上 bundle exec

为了 Rails 5和 Rails 6

运行 rails console -e test

确保已经安装了 GEM,并且在 Environment.rb 或 test.rb 文件中添加了以下代码行。

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

应该足够了。

大卫史密斯是正确的,只是做

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.

这是 [环境]位。

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

测试 Env

rails console test # or just rails c test

发展环境

rails console # or just rails c

您可以指定应该在其中操作控制台命令的环境。

rails c [environment]

例子

1)分期

rails c staging

2)制作

rails c production

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

这里有三个不同的问题,有些问题已经解决了,有些没有:

  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

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

rails c -e test

运行 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