【问题标题】:How to run Rails console in the test environment and load test_helper.rb?如何在测试环境中运行 Rails 控制台并加载 test_helper.rb?
【发布时间】:2010-11-06 05:00:48
【问题描述】:

背景:我在使用 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。啊。

【问题讨论】:

  • 因此,如果您将 RAILS_ENV=test 放在脚本/控制台之前,它会按您的预期工作。

标签: ruby-on-rails ruby testing shoulda


【解决方案1】:

适用于 Rails

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

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

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

适用于 Rails 3 和 4

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

适用于 Rails 5 和 6

运行rails console -e test

【讨论】:

  • 在 Rails 3 中,它只是 rails console [environment]
  • 有点不一致,因为要启动服务器你输入rails server -e test
  • 在 Rails 5 中这仍然有效。而且,您确实需要至少加载环境的某些部分——在我的情况下,features/support/helpers.rb 不是自动加载的。此外,Rack::Test 未加载。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    rails c -e test
    

    【讨论】:

      【解决方案4】:
      script/console test
      

      应该是你所需要的。

      【讨论】:

        【解决方案5】:

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

        rails c [environment]
        

        例子

        1) 用于分期

        rails c staging
        

        2) 用于生产

        rails c production
        

        来源及详细说明:The Rails Command Line

        【讨论】:

          【解决方案6】:

          大卫·史密斯是正确的,就这样做

          script/console test
          

          帮助命令将显示为什么会这样:

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

          这是 [环境] 位。

          【讨论】:

            【解决方案7】:

            我分享提问者的痛苦。这里确实存在三个不同的问题,其中一些已解决,有些未解决:

            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
            • ActiveSupport::TestCase 只描述了这两个类方法,所以我不清楚它从哪个类/模块继承了 initialize 方法。但看起来它期望的参数在创建的对象上存储为@NAME
            【解决方案8】:

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

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

            【讨论】:

              【解决方案9】:

              测试环境

              rails console test # or just rails c test
              

              开发环境

              rails console # or just rails c
              

              【讨论】:

                【解决方案10】:

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

                【讨论】:

                  猜你喜欢
                  • 2013-04-19
                  • 2013-02-28
                  • 1970-01-01
                  • 2013-02-15
                  • 2013-09-07
                  • 1970-01-01
                  • 2018-03-05
                  • 2017-09-21
                  • 2021-07-24
                  相关资源
                  最近更新 更多