J'utilise concombre et Capybara et je voudrais un moyen de simuler l'adresse IP de la demande, comme ceci:Comment est-ce que je moque une adresse IP dans le concombre/capybara?
Given the request ip address is "10.1.2.3"
J'utilise concombre et Capybara et je voudrais un moyen de simuler l'adresse IP de la demande, comme ceci:Comment est-ce que je moque une adresse IP dans le concombre/capybara?
Given the request ip address is "10.1.2.3"
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
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
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. –
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
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. –