Мы используем пользовательские заголовки для аутентификации наших веб-приложений. Прокси-сервис http перехватывает запросы, подтверждает подлинность пользователя и затем вводит пользовательские заголовки в запрос.
Чтобы протестировать приложение, мне нужно записать эти заголовки в запрос, прежде чем он попадет в мои методы ApplicationController. Прямо сейчас, текущий взлом работает для всех моих не-JavaScript-тестов:
# in hooks.rb
Before do
require 'capybara/driver/rack_test_driver'
module Capybara::Driver
class Authentic < RackTest
def env
super.merge('My-Custom-Header' => "foo")
end
end
end
Capybara.register_driver(:authentic) do |app|
Capybara::Driver::Authentic.new(app)
end
Capybara.default_driver = :authentic
end
#in the controller
class ApplicationController < ActionController::Base
before_filter :authenticate
def authenticate
render :file => File.join(Rails.root, "public", "403.html") unless request.env.keys.include?('foo')
end
end
любой запрос, который я не хочу аутентифицировать, я могу просто использовать тег для использования обычного драйвера rack_test:
Feature: Authentication
Valid users should be authenticated.
Invalid users should be redirected to the login page.
Scenario: Authorized
Given I am on the homepage
Then I should see "Create a New Research Project"
@rack_test
Scenario: Unauthorized
Given I go to the homepage
Then I should see "You are not authorized to view this page."
когда я использую браузер селена, подобный метод переопределения env в драйвере, похоже, не эффективен. Я предполагаю, что это потому, что приложение помещено в очередь в потоке Java, и все элементы Rack уже настроены.
Куда мне добавить специальные заголовки для селена, чтобы забрать их?
Спасибо!