Lorsque j'exécute mon test système à l'aide de Rails Test: Système CODE> Je reçois l'erreur suivante:
# Gemfile
group :test do
# Adds support for Capybara system testing and selenium driver
gem 'capybara', '>= 2.15'
gem 'selenium-webdriver'
# Easy installation and use of chromedriver to run system tests with Chrome
# gem 'chromedriver-helper'
# Using chromedriver in Windows, added to path, via WSL1
end
4 Réponses :
attendre code> appartient au
rspec code>. Il est en effet dans les documents de Capybara, mais dans la section RSPEC, c'est pourquoi vous obtenez le message d'erreur. Essayez d'utiliser Asserter à la place. P>
Je suppose que vous voulez utiliser assert courant_path == patay_success_url code>? Cela ne fonctionne pas car il doit attendre que la page se charge. Je tiens à profiter du comportement d'attente de Capybara en utilisant
avoir_current_path code>
Comme mentionné par Artur, puisque vous utilisez un service de 3ème. Directement dans vos tests, les horaires seront lents et vous devrez peut-être augmenter le temps d'attente de CapyBaras. Il y a plusieurs façons de faire cela p> globalement
pour un bloc d'actions. Cela augmente le temps d'attente maximum pour toutes les affirmations à l'intérieur du bloc (individus maximum pas total) p> li>
ol> la plupart des appels acceptent un paramètre d'attente pour modifier la valeur juste pour cet appel - ce qui a probablement le sens le plus dans ce cas P>
Remarque: Vous voudrez peut-être rechercher quelque chose comme https://github.com/ Conthbot / Fake_Stripe plutôt que de frapper la bande directement au cours de la plupart de vos tests pour des raisons de performances p> Remarque: vous devez toujours préférer l'une des assertions de Capybara fournies sur la plaine Attendez-vous code> fait partie de RSPEC. Si vous utilisez minitest, vous devez utiliser les assertions minteses fournies par Capybara, que vous faites déjà avec
Assert_Selector code>. Celui qui vous manque est
assert_current_path code> - https://rubydoc.info/github/teamcapybara/capybara/capybara/minitest/assertions#assert_current_path-instance_method
capybara.default_max_wait_time = 20 code> dans l'un de vos fichiers de configuration
Cela a l'inconvénient d'une durée potentiellement croissante jusqu'à l'échec de tous vos tests p> li>
ASSERT code> quand traiter avec n'importe quoi relative au navigateur dans vos tests système. P> P>
C'était vraiment utile et je vous suis apprécié de vous connecter directement aux documents pertinents. Je suis maintenant grok que j'utilise Miniest sur RSPEC avec Capybara, qui aurait aidé mon googling plus tôt :) J'ai fini par utiliser assert_current_path (paiditionné_success_url, ignore_query: true) code> pour le faire fonctionner comme j'ai paramètres de requête dynamiques. Si vous pouviez ajouter une mention sur l'augmentation potentiellement
capybara.default_max_wait_tefault_max_wait_time Code> Comme on dirait que je suis interagi avec une tiers, et où exactement cela est défini (voir
@jaredlt a mis à jour et inclus de meilleures solutions que d'augmenter le temps d'attente maximum global
Votre réponse a fourni plus de valeur que je ne m'attendais jamais à obtenir. Je suis humilié par la générosité d'étrangers sur Internet! Merci et j'espère que vous passez une bonne journée
J'ai résolu ceci en procédant comme suit:
Attendez-vous à la ligne CODE> à partir du test (il s'agit bien d'une partie de RSPEC et non de capybara - merci @ Artur.prado ) LI>
- ajout
capybara.default_max_wait_tefault_max_wait_time = 20 code> à Application_system_test_case.rb code> (i Définir 20 parce que la passerelle de test à la vérification des rayures est très lente. La beauté de Capybara étant que ça ne fait pas T Attendez la totalité des 20 secondes, juste "jusqu'à" 20 secondes - il fonctionnera dès qu'il sera capable). Il peut y avoir d'autres implications pour le faire, donnée Capybara définit la valeur par défaut à 2 secondes. Étant donné que ce test est interagi avec un domaine tiers, je suis d'accord avec cela, mais l'acheteur méfiez-vous. Li>
ul> xxx pré> éditer: au lieu de régler max d'attente maximale globalement, voir meilleure option dans Thomas's Réponse . P> p>
Pour ce numéro, définissant correspondeur code> extérieur
rspec code> devrait résoudre le problème. L'ajout des deux lignes suivantes en haut de ce fichier vous permettra d'utiliser
attendre la méthode code> en dehors du contexte de
RSPEC code>