2009-06-26 50 views
106

背景:我在Thoughtbot的“工厂女孩”宝石上遇到了一些问题,它用于创建对象以用于单元和其他测试。我想要去控制台并运行不同的Factory Girl电话来查看发生了什么。比如,我想去那里有做...如何在测试环境中运行Rails控制台并加载test_helper.rb?

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

格儿。哎呀。

+1

因此,如果你已经把该RAILS_ENV =测试脚本/控制台前,你希望它会工作。 – Jared 2009-12-01 19:34:35

回答

165

对于滑轨< 3.0

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

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

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

对于导轨3和4

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

+60

在rails 3中,它只是`rails console [environment]` – 2010-12-14 20:00:52

+26

这有点不一致,因为要启动服务器,请键入`rails server -e test` – Jason 2011-01-20 22:14:33

1

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

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

应该是你所需要的。

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. 

这是[环境]位。

58

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

0

测试信封

rails console test # or just rails c test 

发展论坛信封

rails console # or just rails c 
3

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

rails c [environment] 

实例

1)对于分段

rails c staging 

2)为生产

rails c production 

对于源&详细描述:The Rails Command Line

1

我分享了提问者的痛苦。实际上是由三个不同的问题在这里,其中一些解决的,有些不是:

  1. 你如何开始在测试环境控制台?

    对于最近的Rails版本,bundle exec rails c test或其替代语法。

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

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

    对我来说,这将返回true,表示它在启动控制台时尚未加载。如果该声明返回错误,那么你只是浪费了几次击键,但你仍然很好。

  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

相关问题