minitest可以单独用于测试rails应用程序吗?

时间:2016-03-09 19:19:21

标签: ruby-on-rails ruby unit-testing integration-testing minitest

我是Ruby&的新手Rails基本上来自Java背景,因此我提前为我对RoR的有限知识道歉。

Ruby版本= 2.1

Rails版本= 4.2

在处理现有的Rails 4应用程序时,我遇到了在其中一个测试文件中编写的以下测试。这个测试试图测试应用程序的登录页面,但我对以下问题感到困惑:

  1. MiniTest仅用于单元测试或集成测试,还是两者兼而有之?
  2. 这个测试实际上是MiniTest测试,还是只是在帮助文件中导入现有的默认Ruby测试框架而不是实际使用任何MiniTest功能?
  3. MiniTest可以实际测试DOM元素,例如用户输入框中的输入文本,按钮点击等吗?
  4. 它是否通过内部启动服务器来实际访问应用程序?
  5. 可以单独使用MiniTest通过在无头模式下运行来端到端地测试Rails应用程序吗?
  6. 通过selenium启动浏览器,可以单独使用MiniTest来端到端地测试Rails应用程序吗?我知道Capybara可以做到这一点。
  7. 我猜这个测试是针对localhost运行的。如何将此测试点指向其他主机www.dev-server.com
  8. login_test.rb

    require 'integration_test_helper'
    class LoginTest < ActionDispatch::IntegrationTest
    
      setup do
        @user = users(:admin)
      end
    
      test "login page is displayed on root path" do
        delete '/signout'
        get root_path
        assert redirect?
        assert_redirected_to '/signin'
        follow_redirect!
        assert_template :new
        assert_template %r{\Adevise/sessions/new\Z}
        assert_select "a[href=?]", users_path, count: 0
        assert_select "input[id=?]", 'login-email', count: 1
        assert_select "input[id=?]", 'login-password', count: 1
        assert_select "button[id=?]", 'login', count: 1
      end
    
    end
    

    integration_test_helper.rb

    ENV['RAILS_ENV'] ||= 'test'
    require File.expand_path('../../config/environment', __FILE__)
    require 'rails/test_help'
    require "minitest/reporters"
    Minitest::Reporters.use! [Minitest::Reporters::JUnitReporter.new, Minitest::Reporters::SpecReporter.new(:color => true)]
    
    class ActiveSupport::TestCase
      # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
      fixtures :all
    
     ....
    
    
    end
    

1 个答案:

答案 0 :(得分:2)

  
      
  1. “MiniTest”仅用于单元测试或集成测试,还是两者兼而有之?
  2.   

MiniTest是一个通用的框架,可以像JUnit或PHPUnit一样进行测试。它开箱即用,但可以扩展用于不同的任务。它是一把扳手,你可以用扳手来制造火箭飞船或玩具车。

  
      
  1. 此测试实际上是MiniTest测试,还是仅在辅助文件中导入现有的默认Ruby测试框架而不是   实际上使用任何MiniTest功能?
  2.   

Rails测试都建立在ActiveSupport::TestCase之上。 ActiveSupport::TestCase构建为在MiniTest或较早的Test::Unit之上运行,后者提供转轮和断言。

  
      
  1. MiniTest可以实际测试DOM元素,例如用户输入框中的输入文字,按钮点击等吗?
  2.   

是和否。 MiniTest本身不包含文档解析器或DOM模拟器。如果你添加 - 是的。

  
      
  1. 它是否通过内部启动服务器来实际访问应用程序?
  2.   

是。集成测试实际上使用HTTP在您的应用上执行请求。

  
      
  1. 只能MiniTest可以通过在无头模式下运行来端到端地测试Rails应用程序吗?
  2.   

不,见上文。

  
      
  1. 只能MiniTest通过selenium启动浏览器来端到端地测试Rails应用程序吗?我知道Capybara可以做到这一点。
  2.   

不,见上文。

  
      
  1. 我猜这个测试是针对localhost运行的。如何将此测试点指向其他主机www.dev-server.com
  2.   

有可能吗?是。好主意?没那么多。

您不想这样做的原因是:

  • 它的sloooow。
  • 如果您的开发服务器没有非常不雅的曝光,则无法正确重置测试之间的状态。

这基本上是你在对服务器进行javascript测试时不得不做的事情。那种情况太可怕了。

您可能正在寻找的是设置一个CI环境,例如Travis,您可以在其中运行测试。