【问题标题】:Ruby on Rails: Switch from test_unit to rspecRuby on Rails:从 test_unit 切换到 rspec
【发布时间】:2012-03-27 05:53:27
【问题描述】:

我正在阅读建议使用 rspec 的教程,但我已经完成了很多默认的 rails 安装。我真的不想重做安装。无论如何,当我跑步时

$ rails g integration_test named

我明白了

  invoke  test_unit
  create    test/integration/named_test.rb

当我运行bundle 时,会列出各种rspec gem,但不会列出test_unit。本教程似乎让 rails 调用 rspec 而不是 test_unit 而没有做任何额外的事情。如何让 Rails 使用 rspec 和集成测试生成器命令?

【问题讨论】:

    标签: ruby-on-rails rspec gem testunit


    【解决方案1】:

    在您的config/application.rb 文件中:

    config.generators do |g|
      g.test_framework :rspec
    end
    

    现在,当您运行生成器(例如 rails generate scaffold post)时,您将获得 rspec 测试文件。记得重启你的服务器。有关生成器的更多信息,请参阅:

    RailsCasts #216 Generators in Rails 3

    如果你真的想使用 integration_test 生成器,你需要专门修改命令:

    rails g integration_test named --integration-tool=rspec
    

    【讨论】:

    • 我已经这样做了..重新启动服务器是什么意思?它从未运行过。
    • 我的意思是重新启动 spork 或您的测试界面。如果您正确地完成了该操作并执行了“rails g scaffold --help”,您应该将“rspec”视为默认测试框架。也检查我的编辑。
    • 我按照您的要求更新了 config/application.rb 并运行 rails g scaffold --help,它仍然显示 test_unit。我需要做些什么来重新运行配置或以某种方式手动更改这些设置吗?
    • 对于未来想要另辟蹊径的用户,请留下此评论以确保完整性:将上述答案与g.test_framework :test_unit 结合使用。
    • 如何切换回来?我可以同时使用两个生成器吗?
    【解决方案2】:

    使用 Rails 3.2.8rspec-rails 2.11.4,我发现问题出在我的 Gemfile 中。我在:test 组中有rspec-rails,但在:development 组中没有。由于 Rails 默认在开发模式下运行(包括在运行 generate 时),rspec-rails 必须在您的 :development 组中才能挂接到生成器。设置好之后,一切正常。

    【讨论】:

    • +1 rspec-rails install as railitie github.com/rspec/rspec-rails/blob/master/lib/… 并将自身配置为测试框架和集成工具。因此,可以将 gem 包含在 gemfile group :development, :test do 的共享组中
    • 7 年后仍然相关!
    【解决方案3】:

    从 Rails 3.2.12 开始,按顺序执行这些步骤

    rails new app_name --skip-test-unit
    

    将 rspec-rails 添加到开发、测试组的 Gemfile 中

    group :development, :test do
      gem 'rspec-rails'
    end
    

    运行bundle install

    运行生成器

    rails generate rspec:install
    

    ...并清理您现有的测试目录:

    rm -Rf $RAILS_ROOT/test    
    

    【讨论】:

    • 如果项目也已经创建,这将起作用。忽略rails new 命令即可。
    • 小心使用rm -Rf $RAILS_ROOT/test 命令,您也会删除邮件预览...
    【解决方案4】:

    今天遇到了这个问题。 application.rb 必须更新为:

    config.generators do |g|
      g.test_framework :rspec
      g.integration_tool :rspec
    end
    

    【讨论】:

    • 不再需要编辑 application.rb 文件,至少在带有 rspec-rails 的 Rails 3.2 上
    【解决方案5】:

    要使用 RSpec 而不是默认的 Test::Unit,请先运行以下命令

    $ rails generate rspec:install
    

    此命令将创建以下文件夹/文件

    create  .rspec
    create  spec
    create  spec/spec_helper.rb
    

    现在,每当您使用生成器生成控制器、模型等 Rails 组件时,它都会创建相应的 RSpec。

    【讨论】:

    • 如果您的 Gemfile 中还没有 rspec,这将不起作用(rails 4)。请参阅下面的 fontno 答案。
    • 如何切换回来?我可以同时使用两个生成器吗?
    【解决方案6】:

    在配置/应用程序中,添加此代码

     config.generators do |g|
           g.test_framework  :rspec
           g.integration_tool :rspec
     end
    

    【讨论】:

      【解决方案7】:

      1。创建新的rails应用时,跳过TestUnit框架,否则会生成test_unit目录。

      $rails new your_app --skip-test-unit

      2。将以下代码添加到 your_app/config/application.rb 文件:

      config.generators do |g| g.test_framework :rspec end

      3。将以下代码添加到 your_app 的 Gemfile:

      group :test, :development do gem 'rspec-rails' end 保存它,然后运行bundle install 来安装rspec gem

      4。初始化spec/目录

      rails generate rspec:install

      更多详情请参考:https://github.com/rspec/rspec-rails

      【讨论】:

        【解决方案8】:

        我发现我所做的一些其他方法仍然有效的是检查我的拼写....我有 @tovodeverett 将 rspec-rails 与 :development 和 :test 分组但拼写不正确的 development。这解决了我的问题,但我使用 test_unit 而不是 rspec 生成测试。

        【讨论】:

          【解决方案9】:
          $ rails g model Account
                invoke  active_record
                create    db/migrate/20140205052617_create_accounts.rb
                create    app/models/account.rb
                invoke    test_unit
                create      test/models/account_test.rb
                create      test/fixtures/accounts.yml
          $ rails d model Account
          

          运行 script/rails generate rspec:install 不会将 rspec 添加为默认框架。在 config/application.rb 中添加了下面的命令,然后它就可以工作了

          config.generators do |g|
            g.test_framework :rspec
          end
          $ rails g model Account
                invoke  active_record
                create    db/migrate/20140205052957_create_accounts.rb
                create    app/models/account.rb
                invoke    rspec
                create      spec/models/account_spec.rb
          $ rails -v
          Rails 4.0.2
          

          【讨论】:

            猜你喜欢
            • 2014-03-20
            • 1970-01-01
            • 2012-02-02
            • 1970-01-01
            • 2015-10-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多