【问题标题】:Using Minitest in Rails在 Rails 中使用 Minitest
【发布时间】:2011-10-02 19:25:35
【问题描述】:

最近,我读了很多关于 Minitest 的文章。我真的很喜欢超轻量级测试框架的想法。我决定在最近的一个项目中用它替换 rspec 并且没有运气让它全部工作。我的问题是

a) 在我的验收/集成测试中获取命名路由(rspec 和 test::unit 似乎自动包含它们,但不使用 minitest),
b) 而且在 Rails 中整体缺乏采用让我感到不安(每个人似乎都在使用 rspec,尽管它更多地用于 gems/libraries)。

当 rspec 在测试 rails 应用程序方面占据主导地位时,是否值得使用 minitest?

【问题讨论】:

    标签: ruby-on-rails-3 minitest


    【解决方案1】:

    我是minitest-rails 的作者。从您最初提出这个问题到现在,情况发生了很大变化。我的回答假设您使用的是 minitest-rails。

    命名路线

    如果您使用的是 minitest-rails,它就可以正常工作(现在)。您可以使用生成器来创建这些测试,或者自己编写它们。在您的验收/集成测试中,所有命名的路由都可用。

    require "minitest_helper"
    
    describe "Homepage Acceptance Test" do
      it "must load successfully" do
        get root_path
        assert_response :success
      end
    end
    

    采用

    我认为随着我们接近 Rails 4,我们将继续看到对使用 Minitest 和 Rails 的更多关注。

    值得吗?

    我认为现在开始使用 Minitest 是完全值得的。 Minitest 现在正在进行大量活动。它也与最近对快速测试的关注非常吻合。但这实际上取决于您的应用和团队动态。

    【讨论】:

    • 非常酷,吹法师。很高兴看到 Minitest 受到了广泛关注,而且 minitest-rails 绝对是如今将 Minitest 与 Rails 一起使用的最佳选择。
    • 为什么 root_path 有效而 users_path 无效?您如何测试应用中任何路由的成功页面加载?
    【解决方案2】:

    我最近将一个应用程序从 Rspec 切换到 Minitest,这非常值得。测试运行速度快得多,语法鼓励更智能、更精简的代码,不知何故,我现在对套件更有信心(工作中的魔力减少了)。

    改进扩展到集成/验收测试,我发现 Minitest with Capybara 比 Cucumber 更易读、更直接(而且更不脆弱)。

    以下是获取unit, functional & integration tests running with Minitest using spec syntax 所需的所有帮助文件。这是基于@tenderlove 的要点和大量阅读/实验。以下注意事项和注意事项。

    ENV["RAILS_ENV"] = "test"
    require File.expand_path('../../config/environment', __FILE__)
    
    require 'rubygems'
    gem 'minitest'
    require 'minitest/autorun'
    require 'action_controller/test_case'
    
    require 'miniskirt'
    require 'capybara/rails'
    require 'mocha'
    require 'turn'
    
    # Support files
    Dir["#{File.expand_path(File.dirname(__FILE__))}/support/*.rb"].each do |file|
      require file
    end
    
    
    class MiniTest::Spec
      include ActiveSupport::Testing::SetupAndTeardown
    
      alias :method_name :__name__ if defined? :__name__
    end
    
    
    class ControllerSpec < MiniTest::Spec
      include Rails.application.routes.url_helpers
      include ActionController::TestCase::Behavior
    
      before do
        @routes = Rails.application.routes
      end
    end
    
    # Test subjects ending with 'Controller' are treated as functional tests
    #   e.g. describe TestController do ...
    MiniTest::Spec.register_spec_type( /Controller$/, ControllerSpec )
    
    
    class AcceptanceSpec < MiniTest::Spec
      include Rails.application.routes.url_helpers
      include Capybara::DSL
    
      before do
        @routes = Rails.application.routes
      end
    end
    
    # Test subjects ending with 'Integration' are treated as acceptance/integration tests
    #   e.g. describe 'Test system Integration' do ...
    MiniTest::Spec.register_spec_type( /Integration$/, AcceptanceSpec )
    
    
    Turn.config do |c|
      # use one of output formats:
      # :outline  - turn's original case/test outline mode [default]
      # :progress - indicates progress with progress bar
      # :dotted   - test/unit's traditional dot-progress mode
      # :pretty   - new pretty reporter
      # :marshal  - dump output as YAML (normal run mode only)
      # :cue      - interactive testing
      c.format  = :cue
      # turn on invoke/execute tracing, enable full backtrace
      c.trace   = true
      # use humanized test names (works only with :outline format)
      c.natural = true
    end
    

    备注

    • 适用于 Rails 3.1 或 3.2。没有尝试过。
    • gem 'minitest' 是获得一些更高级的 Minitest 功能所必需的(let 块等)
    • 这使用了 mocha(更完整的模拟/存根)、迷你裙(factory_girl lite)和新的转轮。这些都不是依赖项。
    • 从 Rails 3.2 开始,控制器测试中嵌套的 describe 块会引发错误

    【讨论】:

    • Ryan Bates 最近发布了Railscast on MiniTest with Rails。它需要订阅,但毫无疑问是值得的。
    • 我一直在使用 minitest-rails 的这个分支,并且我也遇到了嵌套描述块的错误。是否有针对该问题的公开票?
    • 很好 答案,正在使用最新的3.2.1 rails。你的帖子太棒了,我不需要像 minitest-rails 这样的 gem,我自己写代码,谢谢!
    • 太棒了。迷你测试+1,迷你裙+1,转身+1。 :)
    【解决方案3】:

    前几天我做了一些工作,使使用 minitest 测试 Rails 变得更加简单。请查看http://rawonrails.blogspot.com/2012/01/better-way-of-testing-rails-application.html 了解更多信息。

    【讨论】:

      【解决方案4】:

      minitest-rails gem 让这一切变得简单。

      【讨论】:

        【解决方案5】:

        编码 Ningja 的“MiniTest::Spec setup with Capybara in Rails 3.1”极大地帮助了 Minitest 与 Rails 的集成。

        http://code-ningja.posterous.com/73460416

        【讨论】:

          猜你喜欢
          • 2017-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-20
          相关资源
          最近更新 更多