Настройка одноразового входа с помощью minitest / capybara для запуска тестов rails
Я использую capybara
с minitest
на рельсах 2.3.14 . Как и большинство приложений, это приложение также требует входа в систему, чтобы сделать что-либо внутри сайта. Я хотел бы иметь возможность войти один раз в Test-suite и использовать эту сессию во всех тестах, которые выполняются. Как я могу рефакторировать это в minitest_helper
? Сейчас мой помощник выглядит примерно так:
#!/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
Спасибо.
1 ответ:
Вот пример нескольких сеансов и пользовательского 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
Источник: http://guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests