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


121

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

>> Factory(:user).inspect

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

$脚本/控制台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

r 啊


1
因此,如果您将RAILS_ENV = test放在脚本/控制台之前,那么它将按预期工作。
杰瑞德(Jared)2009年

Answers:


192

对于<3.0的Rails

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

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

附带说明:脚本/中的各种二进制文件具有不同的设置Rails环境的方式,确实有些奇怪。

对于Rails 3和4

运行rails c testbundle exec如果当前的应用程序环境需要此选项,则添加前缀。

对于Rails 5和6

运行rails console -e test


63
在rails 3中,只是rails console [environment]
Idris Mokhtarzada

26
这有点不一致,因为要启动您键入的服务器rails server -e test
Jason

在Rails 5中,这仍然有效。而且,您确实需要至少加载环境的某些部分-就我而言features/support/helpers.rb,并不是自动加载的。此外,Rack::Test未加载。
Derrell Durrett's

61

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



8

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

rails c -e test

4

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

rails c [environment]

例子

1)分期

rails c staging

2)生产

rails c production

有关源代码和详细描述: Rails命令行


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.

这是[环境]位。


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


而不是试验或错误-使用rails API指南查找所需的内容api.rubyonrails.org/classes/ActiveSupport/TestCase.html ...这可能是:random默认的测试顺序
Mirv-Matt

仅针对ActiveSupport :: TestCase描述了这两个类方法,因此我不清楚它从哪个类/模块继承其initialize方法。但是它看起来像期望的参数一样存储@NAME在创建的对象上。
Nick Davies


0

测试环境

rails console test # or just rails c test

发展环境

rails console # or just rails c

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.