Capybara avec des sous-domaines - default_host
J'ai une application qui utilise les sous-domaines pour changer de base de données (multi-tenant). Je suis en train d'utiliser le Capybara pour les tests d'intégration, et c'est vraiment s'appuie beaucoup sur des sous-domaines.
Ma compréhension était que la mise Capybara.default_host=
à quelque chose serait de faire toutes mes demandes proviennent de cet hôte. Cela ne semble pas être le cas. Dans ce post, l'auteur recommande de visiter l'url explicite avec un hôte, mais cela devient un peu gênant si je suis la navigation de tous sur la place. Je voudrais juste mettre l'hôte, puis être en mesure d'utiliser mon rails de chemins comme prévu. Pas sûr de ce que je fais mal, mais voici ce que j'ai essayé:
# spec_helper.rb
RSpec.configure do |config|
config.before(:each, :type => :request) do
Capybara.default_host = 'http://app.mydomain.com'
end
end
# in some_integration_spec.rb
before do
puts "Capybara.default_host: #{Capybara.default_host}"
puts "some_app_url: #{some_app_url}"
end
Cela donne le résultat:
Capybara.default_host: http://app.mydomain.com
some_app_url: http://www.example.com/some_path
Ce que je fais mal? default_host
semble ne rien faire. Comme je l'ai dit, je ne veux pas avoir à dire visit(Capybara.default_host + some_app_path)
que c'est un peu gênant à chaque fois. Sinon, pourquoi est-ce à default_host option existe pas?
- Peut-être pourrait être utile à quelqu'un ma réponse à cette question
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de l'utilisation prévue de
default_host
, maisapp_host
fait ce que vous avez besoin. J'ai trouvé, j'ai d'abord besoin d'appeler les rails de la session de la méthodehost!
afin de configurer l'hôte de la chaîne qui sera transmise aux contrôleurs dans l'objet de requête.Ensuite, vous devez définir
Capybara.app_host
dire Capybara pour appeler votre application via le serveur web au lieu de seulement faire les appels en cours. Si vous ne le faites pas alors Capybara perruques quand il rencontre les redirections et les gouttes les informations d'hôte dans la deuxième demande.Je ne suis pas sûr de savoir pourquoi cela ne prend pas soin de les Rails
request
fin des choses automatiquement, mais j'ai trouvé que si je leur jeu de l'hôte dans les deux endroits, explicitement, puis-je obtenir des résultats incohérents.Vous pouvez simplement utiliser des chemins relatifs vers les pages d'accès.
Mise à jour:
Capybara 2.x et rspec-rails de la version 2.12.0 introduit la "Fonctionnalité" spécifications pour l'exécution de Capybara tests d'acceptation. La nouvelle
FeatureExampleGroup
module dansrspec-rails
est différente deRequestExampleGroup
et n'a plus accès à la baie-testhost!
méthode. Maintenant vous voulez utiliserdefault_url_options
à la place:lvh.me
vous pouvez définir automatiquement le port à l'aide deCapybara.server_port = 31234
, puisset_host "lvh.me:31234"
after(:each) do Capybara.app_host = Capybara.default_host end
Lorsque vous avez besoin de changer l'URL à inclure le sous-domaine, vous pouvez spécifier le
app_host
dans votre démarche définitions. Utiliser un nom de domaine commelvh.me
car il points de127.0.0.1
:Capybara suppose que lorsque vous êtes à la spécification d'un
app_host
que vous faites des tests sur un serveur distant s'exécute sur le port 80, mais dans notre cas, nous sommes en train de tester un local de l'application qui s'exécute sur un port aléatoire spécifié par Capybara. Pour résoudre ce problème, dans votreenv.rb
fichier, ajoutez cette ligne:Maintenant, lorsque vous visitez une page de votre application...
...l'url de spécifier le sous-domaine ainsi que le port sur lequel l'application est en cours d'exécution sur.
Pour info: Cela a fonctionné pour moi, en utilisant le Capybara 2.0.2.
Capybara.current_session.server.port
Ce mec a le droit de réponse ici:
http://zurb.com/forrst/posts/Testing_Subdomains_in_Capybara-g4M
Vous voulez faire
de:
capybara-webkit (1.3.0)
Ce n'est pas exactement la même situation que vous, mais cela peut aider certaines personnes:
Pour mon projet actuel, je suis en utilisant pow avec de nombreux sous-domaines. La suite de test a également pour s'exécuter sur un autre port.
La solution dépend de la version de capybara vous êtes en cours d'exécution.
Pour le courant de la dernière version, j'ai mis cela dans custom_env.rb:
Avec capybara 1.1.2, j'avais dû faire le changement ci-dessus, mais
server_host
devientapp_host
ET modifier lib/capybara/serveur.rb dans la pierre comme ceci: