Настройка HTTP_REFERER не работает до подключения к конфигурации RSpec - PullRequest
1 голос
/ 02 августа 2011

Я видел различные версии, как настроить глобальный HTTP_REFERER в RSpec, но ни одна из них не работала с RSpec 2.6.4:

RSpec.configure do |config|
  config.before(:each, :type => :controller) do
    request.env["HTTP_REFERER"] = root_url
  end
end

Запрос всегда nil:

undefined method `env' for nil:NilClass

RSpec вызывает это:

def self.eval_before_eachs(example)
  world.run_hook_filtered(:before, :each, self, example.example_group_instance, example)
  ancestors.reverse.each { |ancestor| ancestor.run_hook(:before, :each, example.example_group_instance) }
end

Ответы [ 2 ]

1 голос
/ 23 февраля 2012
# spec/support/http_referer.rb  
module HttpReferer
  def self.included(base)
    base.class_eval do
      setup :setup_http_referer if respond_to?(:setup)
    end
  end

  def setup_http_referer
    @request.env["HTTP_REFERER"] = "/back"
  end
end

# spec/spec_helper.rb
RSpec.configure do |config|
  config.include HttpReferer, :type => :controller
end
1 голос
/ 30 сентября 2011

Эта ссылка может помочь вам указывать в правильном направлении ...

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-%28and-rspec%29

Вам нужно будет создать модуль, подобный ...

module Foo
  def set_referer
    @request.env["HTTP_REFERER"] = root_url
  end
end

Затем настройте RSpec ...

RSpec.configure do |config|
  config.extend Foo, :type => :controller
end

Затем вызовите его в каждой спецификации вашего контроллера ...

describe MyController do
  set_referer
end

Мы используем аналогичный подход для установки нашего сеансапеченье, но YMMV.

...