0
votes

Pourquoi dois-je obtenir l'erreur "méthode non définie` attendre "" lors de l'exécution d'un test système sur des rails?

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


0 commentaires

4 Réponses :


0
votes

attendre appartient au rspec . 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.


1 commentaires

Je suppose que vous voulez utiliser assert courant_path == patay_success_url ? 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



2
votes

Comme mentionné par Artur, Attendez-vous 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 . Celui qui vous manque est assert_current_path - https://rubydoc.info/github/teamcapybara/capybara/capybara/minitest/assertions#assert_current_path-instance_method xxx

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

  1. globalement capybara.default_max_wait_time = 20 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

  2. 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) xxx

    1. 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 XXX

      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

      Remarque: vous devez toujours préférer l'une des assertions de Capybara fournies sur la plaine ASSERT quand traiter avec n'importe quoi relative au navigateur dans vos tests système.


3 commentaires

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) 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 Comme on dirait que je suis interagi avec une tiers, et où exactement cela est défini (voir Ma réponse Je vais heureusement accepter le vôtre).


@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



0
votes

J'ai résolu ceci en procédant comme suit:

  • Supprimer le Attendez-vous à la ligne à partir du test (il s'agit bien d'une partie de RSPEC et non de capybara - merci @ Artur.prado )
  • ajout capybara.default_max_wait_tefault_max_wait_time = 20 à Application_system_test_case.rb (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. xxx

    éditer: au lieu de régler max d'attente maximale globalement, voir meilleure option dans Thomas's Réponse .


0 commentaires

0
votes

Pour ce numéro, définissant correspondeur extérieur rspec 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 en dehors du contexte de RSPEC xxx


0 commentaires