2010-06-08 8 views

Répondre

7

Je l'ai résolu en passant l'adresse IP dans une variable d'environnement:

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

Je suis sur des rails 3.1 et je devais changer remote_ip IP. Cela fonctionne bien avec la gem rubygeocoder.com. Merci d'avoir posté! – jspooner

+3

C'est cool et utile. Mais une note à d'autres lecteurs: le meilleur pour singe patcher le ApplicationController en l'ouvrant avec un fichier comme 'spec/support/remote_ip_monkey_patch.rb'. C'est plus propre et plus joli. –

5

Mon mélange de Leventix et de solutions de Ramon:

spec/support/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 
+0

Pourriez-vous me dire quel type d'objet 'ENV ['RAILS_TEST_IP_ADDRESS']' est pour que je puisse le créer? Est-ce juste une chaîne? Je vais essayer "123.123.123.123" ou quelque chose. –