Как мне издеваться над IP-адресом огурца / капибары? - PullRequest
4 голосов
/ 08 июня 2010

Я использую Cucumber и Capybara, и мне нужен способ для имитации IP-адреса запроса, например:

Given the request ip address is "10.1.2.3"

Ответы [ 2 ]

7 голосов
/ 08 июня 2010

Я решил это, передав IP-адрес в переменную окружения:

  When /^the request ip address is "([^\"]*)"$/ do |ip_address|
    ENV['RAILS_TEST_IP_ADDRESS'] = ip_address
  end

application_controller.rb:

  before_filter :mock_ip_address

  def mock_ip_address
    if Rails.env == 'cucumber' || Rails.env == 'test'
      test_ip = ENV['RAILS_TEST_IP_ADDRESS']
      unless test_ip.nil? or test_ip.empty?
        request.instance_eval <<-EOS
          def remote_ip
            "#{test_ip}"
          end
        EOS
      end
    end
  end
6 голосов
/ 16 января 2012

Мое сочетание решений Leventix и Ramon:

Спецификация / поддержка / remote_ip_monkey_patch.rb

module ActionDispatch
  class Request

    def remote_ip_with_mocking
      test_ip = ENV['RAILS_TEST_IP_ADDRESS']

      unless test_ip.nil? or test_ip.empty?
        return test_ip
      else
        return remote_ip_without_mocking
      end
    end

    alias_method_chain :remote_ip, :mocking

  end
end
...