Изменение переменных среды запроса в тестировании интеграции с Rails - PullRequest
7 голосов
/ 17 июня 2010

Я написал функциональный тест, который изменяет некоторые переменные среды объекта запроса для имитации входа пользователя в систему.

require 'test_helper'
class BeesControllerTest < ActionController::TestCase

  # See that the index page gets called correctly.
  def test_get_index

    @request.env['HTTPS'] = "on"
    @request.env['SERVER_NAME'] = "sandbox.example.com"
    @request.env['REMOTE_USER'] = "joeuser" # Authn/Authz done via REMOTE_USER

    get :index
    assert_response :success
    assert_not_nil(assigns(:bees))
    assert_select "title", "Bees and Honey"
  end
end

Функциональный тест работает нормально.

Теперь я хочусделать нечто подобное в рамках интеграционного тестирования.Вот что я попробовал:

require 'test_helper'
class CreateBeeTest < ActionController::IntegrationTest
  fixtures :bees

  def test_create
    @request.env['HTTPS'] = "on"
    @request.env['SERVER_NAME'] = "sandbox.example.com"
    @request.env['REMOTE_USER'] = "joeuser" # Authn/Authz done via REMOTE_USER

    https?

    get "/"
    assert_response :success
    [... more ...]
  end
end

Я получаю сообщение об ошибке, что @request равно нулю.Я подозреваю, что это как-то связано с объектом сеанса, но я не уверен, как заставить его работать.

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

Вы можете установить HTTPS в интеграционных тестах с помощью

https!

и задать имя хоста с помощью:

host! "sandbox.example.com"

Что может быть эквивалентно тому, что вы хотите сделать?

Это описано в направляющих Rails Направляющие Rails

0 голосов
/ 28 мая 2014

Вы можете изменить переменные запроса через параметры для метода post.

Для вашего случая метод test_create будет:

def test_create
  https!

  get "/", nil, { 'SERVER_NAME'] => "sandbox.example.com", 'REMOTE_USER'] => "joeuser" }

  assert_response :success
  [... more ...]
end

То же самое работает для установки пост-запроса на необработанные данные:

post root_path, nil, { 'RAW_POST_DATA' => 'some string' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...