Je suis la construction d'un Rails de 3 app qui rend différents points de vue pour les appareils mobiles (à l'aide de jQuery Mobile) et les navigateurs de bureau. Je suis en train de tester avec du Concombre/Capybara, et de séparer les suites de test pour mobile et navigateur. Je suis en mesure de définir un mobile chaîne de l'Agent Utilisateur dans la requête HTTP en-tête de l'amende juste à l'aide de la "en-têtes hack" qui se trouve ici...
À l'aide de Concombre/Capybara dans Rails 3, comment puis-je personnaliser la chaîne User-Agent?
Le Problème...
La plupart de mes mobiles de Concombre étapes de fonctionner correctement (par exemple, j'ai mis le mobile-tête en une étape, par la suite, les affichages mobiles de rendu). Cependant, après la soumission d'un formulaire, le test, puis rend un navigateur en vue de la prochaine étape (pas la vue mobile je veux). Je pense que cela peut-être parce que le Capybara est de faire tomber la tête à la suite d'un formulaire de soumission de l'action.
J'ai essayé de le tester en ajoutant un enregistreur de frappe pour mon contrôleur d'action pour que je puisse voir le user_agent en-têtes, comme suit:
def show
# …
logger.info("Headers: #{request.user_agent}")
# …
end
J'ai utilisé un iPhone en-tête (l'Acheteur est la ressource). Dans mon test.journal que je vois:
Pour l'action de création...
Started POST "/buyers" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#create as HTML
#...
Headers: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
#...
Redirected to http://www.example.com/buyers/1
Completed 302 Found in 7ms
Pour la suite de l'action (note "en-Têtes:" est vide)...
Started GET "/buyers/1" for 127.0.0.1 at 2011-04-19 16:49:18 -0700
Processing by BuyersController#show as HTML
#...
Headers:
#...
Completed 200 OK in 4ms (Views: 2.8ms | ActiveRecord: 1.4ms)
Comme on pouvait s'y attendre, le ‘me montrer la page' étape rend alors dans la page du navigateur, pas le mobile de la page que je veux.
Comment puis-je préserver l'en-tête de sorte que tous mes mobiles étapes se déroulent dans mon mobile de la suite de tests?
Mise à jour
Jnicklas (créateur de la vraiment génial Capybara bijou!) répond:
"C'est plus une question qu'un problème, tbh. En Rack-Test il n'existe actuellement aucun moyen de la réalisation de ce court of monkey patching que je suis au courant. J'ai pensé à l'ajout d'un en-tête de l'option à la baie-pilote d'essai, ce qui permettrait le passage à des différentes options d'en-tête. Si vous utilisez beaucoup de JavaScript, le Sélénium pourrait être un meilleur ajustement de toute façon et vous permet de configurer l'agent de l'utilisateur librement, autant que je me souvienne."