2016-10-02 1 views
0

Nous utilisons des composants de réaction dans nos vues Rails, dont l'un lorsque vous cliquez sur un bouton rend un autre composant à sa place.Test du contenu nouvellement injecté avec Rspec et Capybara

Idéalement, nous voulons les sauvegarder avec des tests de fonctionnalité Rspec, mais lorsque le bouton est cliqué et que le nouveau composant est rendu, la valeur de page n'est pas mise à jour pour refléter cela.

Existe-t-il un moyen avec Rspec/Capybara pour obtenir le contenu nouvellement injecté après que le nouveau composant de réaction soit rendu?

est ici l'extrait:

scenario 'users should be able to move to step 2', js: true do 
    sign_in_with '[email protected]', 'testpassword' 
    visit new_path 
    fill_in 'name', with: 'Test' 
    select "Category One", :from => "dropdown" 
    click_button 'Next' 
    expect(page).to have_content('New Content') 
end 
+0

quel pilote capybara utilisez-vous? – faron

Répondre

0

Capybara fait devrait mise à jour page avec une logique JS (si tout est réglé correctement). Plus d'infos:

ce qui se passe, cliquez sur Next? Est-ce que ça prend du temps? (Vous devrez peut-être prolonger délai capybara d'attente)

Pour déboguer plus loin, vous pouvez exécuter des tests avec navigateur visible ou prendre des captures d'écran en cas d'échec pour voir le contenu de la page réelle (ex. https://github.com/mattheworiordan/capybara-screenshot)

+0

Il ne prend pas trop de temps lorsque vous cliquez sur le bouton suivant, mais il restaure simplement l'état du composant pour rendre quelque chose d'autre, ce qui fait que le code HTML change de l'origine à quelque chose de nouveau. J'utilise btw pilote webkit. –

0

page est juste un raccourci pour Capybara.current_session, il n'y a pas de cache ou quoi que ce soit qui l'empêcherait d'afficher l'état actuel de la page. Cela tendrait à indiquer que vous ne vérifiez pas les informations correctement modifiées, ou les informations sur la page ne changent pas réellement lorsque vous cliquez sur le bouton. La raison la plus courante pour laquelle l'information ne change pas serait une erreur JS que vous pouvez vérifier en regardant page.driver.error_messages après avoir cliqué sur le bouton. Les raisons les plus courantes de cette erreur, sur une page qui fonctionne correctement lorsque vous le testez manuellement dans un navigateur, serait de construire capybara-webkit avec une ancienne version de Qt ou en utilisant les fonctionnalités ES6 (sans transplaner) qui ne sont pas supportées par le La dernière version de Qt Capybara-Webkit fonctionne avec. Vous voulez vous assurer que vous avez construit capybara-webkit avec Qt 5.5.x et si cela ne fonctionne toujours pas, vérifiez le page.driver.error_messages mentionné précédemment pour voir quelles erreurs sont soulevées.