Comment dois-je traiter les dépendances en ligne lors de l'exécution Rspec hors ligne?
-
25-09-2019 - |
Question
Je voudrais courir RSpec pour tester mon code à la fois quand je suis connecté à Internet et quand je ne suis pas.
Malheureusement, il y a quelques tests dans l'application qui dépendent d'avoir une connexion en direct - envoi d'emails, l'intégration Facebook, etc.
Y at-il un moyen plus pratique de créer un environnement de test en ligne / hors ligne ou est-ce une mauvaise pratique? A en juger par la façon dont peu que je peux trouver à ce sujet sur le web je devine ce dernier.
La solution
Normalement, dans ce genre de situations que vous moquer des parties du code qui se connectent en dehors de votre application. Cela vous permet de tester contre les résultats attendus du service / système auquel vous vous connectez. Il est également plus rapide pour effectuer des tests.
Il y a un bref tutoriel sur moqueur avec rspec mais je suis sûr que vous pouvez trouver beaucoup vous.
Pour les tests que les courriels sont envoyés il y a d'autres approches si vous envoyez par ActionMailer. Il y a une section à ce sujet dans le guide de test .
EDIT (en réponse à des commentaires):
Vous pouvez mettre une méthode TestHelper
pour exécuter uniquement des tests lorsque vous êtes en ligne. Quelque chose comme:
def when_online
if test_remote_connectivity
yield
else
puts "Skipping test offline."
end
end
Ensuite, vous pouvez l'appeler comme:
def test_facebook
when_online do
.....
end
end
Je ne sais pas, je défends tout, mais il pourrait faire ce que vous voulez!
Autres conseils
Vous pouvez utiliser webmock dans les tests / spécifications que vous ne voulez pas se connecter à la ressource à distance.