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

How to run Rails console in the test environment and load test_helper.rb?

背景:我对thoughtbot的"工厂女孩"gem有一些问题,它用于创建在单元和其他测试中使用的对象。我想去控制台运行不同的工厂女孩的电话,看看发生了什么。例如,我想进去有做…

1
>> Factory(:user).inspect

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

$script/console rails_env=测试

但是当我这样做的时候,工厂的课程是不可用的。看起来好像test_helper.rb没有加载。

我尝试了各种各样的require调用,包括一个具有到test_helper.rb的绝对路径的调用,但失败的原因与此类似:

1
2
3
4
$ 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。哎呀。


Rails 3

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

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

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

对于轨道3和4

运行rails c test。如果您在当前应用程序环境中需要,请预先准备好bundle exec

对于轨道5和6

运行rails console -e test


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


1
script/console test

应该是你所需要的。


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

1
rails c -e test

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

1
rails c [environment]

实例

1)分期

1
rails c staging

2)用于生产

1
rails c production

源代码和详细描述:rails命令行


大卫·史密斯是对的

1
script/console test

HELP命令将显示此操作的原因:

1
2
3
4
5
$ 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版本,bundle exec rails c test或其他语法。

  • 如何确保将test/test_helper.rb加载到控制台会话中?

    require './test/test_helper'这样的东西应该做。

    对于我来说,这将返回true,表明在我启动控制台时还没有加载它。如果该语句返回false,那么您就浪费了几次击键,但仍然可以继续下去。

  • 加载测试助手后,如何调用其中定义的方法?

    在典型的测试帮助程序中,自定义方法通常定义为ActiveSupport::TestCase的实例方法。因此,如果您想调用其中一个,您需要该类的一个实例。经过反复尝试,activesupport::testcase.new有一个必需的参数,所以…传递一些东西。

    如果您的测试助手有一个名为create_user的方法,您可以通过以下方式调用它:ActiveSupport::TestCase.new("no idea what this is for").create_user


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

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

    运行Rails控制台测试环境的命令是

    1
    rails c -e test

    1
    RAILS_ENV=test rails c

    如果你面临这样的问题

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

    然后您应该首先通过运行

    1
    bundle exec rake db:test:prepare

    测试环境

    1
    rails console test # or just rails c test

    发展环境

    1
    rails console # or just rails c