如何模拟黄瓜/水豚的IP地址?

时间:2010-06-08 10:18:22

标签: ruby-on-rails cucumber capybara

我正在使用Cucumber和Capybara,我想要一种模拟请求IP地址的方法,如下所示:

Given the request ip address is "10.1.2.3"

2 个答案:

答案 0 :(得分:7)

我通过在环境变量中传递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

答案 1 :(得分:6)

我的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