Ruby on rails 使用minitest/capybara设置一次性登录以运行rails测试

Ruby on rails 使用minitest/capybara设置一次性登录以运行rails测试,ruby-on-rails,session,integration-testing,capybara,minitest,Ruby On Rails,Session,Integration Testing,Capybara,Minitest,我正在rails2.3.14上使用capybara和minitest。与大多数应用程序一样,此应用程序也需要登录才能在站点内执行任何操作。我希望能够在每个测试套件中登录一次,并在所有运行的测试中使用该会话。如何将其重构为minitest\u帮助程序?现在,我的助手看起来像这样: #!/usr/bin/env ruby ENV['RAILS_ENV'] = 'test' require File.expand_path(File.dirname(__FILE__) + "/../config/e

我正在
rails2.3.14上使用
capybara
minitest
。与大多数应用程序一样,此应用程序也需要登录才能在站点内执行任何操作。我希望能够在每个测试套件中登录一次,并在所有运行的测试中使用该会话。如何将其重构为
minitest\u帮助程序
?现在,我的助手看起来像这样:

#!/usr/bin/env ruby

ENV['RAILS_ENV'] = 'test'
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")

gem 'minitest'
gem 'capybara_minitest_spec'

require 'minitest/unit'
require 'minitest/spec'
require 'minitest/mock'
require 'minitest/autorun'
require 'capybara/rails'
require 'factory_girl'


FactoryGirl.find_definitions

class MiniTest::Spec

  include FactoryGirl::Syntax::Methods
  include Capybara::DSL
  include ActionController::URLWriter

  before(:each) do
    # .. misc global setup stuff, db cleanup, etc.
  end

  after(:each) do
    # .. more misc stuff
  end

end

谢谢。

这里是一个集成测试中多个会话和自定义DSL的示例

require 'test_helper'

class UserFlowsTest < ActionDispatch::IntegrationTest
  fixtures :users

  test "login and browse site" do

    # User avs logs in
    avs = login(:avs)
    # User guest logs in
    guest = login(:guest)

    # Both are now available in different sessions
    assert_equal 'Welcome avs!', avs.flash[:notice]
    assert_equal 'Welcome guest!', guest.flash[:notice]

    # User avs can browse site
    avs.browses_site
    # User guest can browse site as well
    guest.browses_site

    # Continue with other assertions
  end

  private

  module CustomDsl
    def browses_site
      get "/products/all"
      assert_response :success
      assert assigns(:products)
    end
  end

  def login(user)
    open_session do |sess|
      sess.extend(CustomDsl)
      u = users(user)
      sess.https!
      sess.post "/login", :username => u.username, :password => u.password
      assert_equal '/welcome', path
      sess.https!(false)
    end
  end
end
需要“测试助手”
类UserFlowsTestu.username,:password=>u.password
断言等于'/welcome',路径
sess.https!(错)
结束
结束
结束
资料来源:

另请参见问题