2012-09-05 1 views
0

Pour détecter et répondre aux agents mobiles des utilisateurs, j'utilisetest .mobile format mime avec capybara/rspec

Mime::Type.register_alias "text/html", :mobile 

et l'approche que je me demande quelle est la meilleure approche pour tester avec capybara. Cet article propose la création d'un pilote d'iphone avec Capybara.register_driver :iphone do |app|

http://blog.plataformatec.com.br/2011/03/configuring-user-agents-with-capybara-selenium-webdriver/

mais je voudrais une approche plus souple où le type MIME est défini par l'extension url

localhost/index.mobile 

et où je peux le faire ce

visit user_path(format: :mobile) 

Rails comprend l'extension et définit la format dans le params hash, mais comment puis-je obtenir les méthodes d'aide url à ajouter à toutes les urls comme une extension de fichier?

+0

la réponse est ici - http://railscasts.com/episodes/199-mobile-devices donc Je vais répondre à ma propre question. –

Répondre

1

Ma réponse est de conserver le format dans une variable de session par Railscast: http://railscasts.com/episodes/199-mobile-devices. J'ai choisi d'utiliser l'extension URL au lieu d'un paramètre querystring car cela semble correspondre mieux.

Voici mon code dans application_controller.rb:

def mobile_device? 
    session.has_key?(:mobile) ? session[:mobile] : request.user_agent =~ /Mobile|webOS/ 
end 
helper_method :mobile_device? 

def prepare_for_mobile 
    # avoid messing with .json, .xml 
    if request.format == 'text/html' 
    # only do this when an explicit extension is present 
    case File.extname(URI.parse(request.fullpath).path) 
    when '.html' 
     session[:mobile] = false 
    when '.mobile' 
     session[:mobile] = true 
    end 
    # stop using a session param and go back to letting the user_agent decide 
    when '.ua' 
     session.delete(:mobile) 
    end 
    request.format = mobile_device? ? :mobile : :html 
    end 
end 

et voici mime_types.rb

Mime::Type.register_alias "text/html", :ua  # let the user agent decide 
Mime::Type.register_alias "text/html", :mobile # mobile