J'écris une interface de ligne de commande à une gemme Ruby et j'ai cette méthode exit_error
, qui agit comme un point d'erreur de sortie à toutes les validations effectuées pendant le traitement.Écriture d'un test Rspec pour une condition d'erreur terminée avec la sortie
def self.exit_error(code,possibilities=[])
puts @errormsgs[code].colorize(:light_red)
if not possibilities.empty? then
puts "It should be:"
possibilities.each{ |p| puts " #{p}".colorize(:light_green) }
end
exit code
end
où @errormsgs
est une table de hachage dont les clés sont les codes d'erreur et dont les valeurs sont des messages d'erreur correspondants.
De cette façon, je peux donner aux utilisateurs des messages d'erreur personnalisés écriture de validation comme:
exit_error(101,@commands) if not valid_command? command
où:
@errormsgs[101] => "Invalid command."
@commands = [ :create, :remove, :list ]
et l'utilisateur en tapant une commande erronée serait un message d'erreur comme:
Invalid command.
It should be:
create
remove
list
Dans le même temps, je peux avoir des scripts bash détectant exactement le code d'erreur qui a causé la condition de sortie, et c'est très important pour ma gemme.
Tout fonctionne bien avec cette méthode et cette stratégie dans son ensemble. Mais je dois avouer que j'ai écrit tout cela sans écrire d'abord des tests. Je sais, je sais ... Honte à moi! Maintenant que j'en ai terminé avec la gemme, je veux améliorer mon taux de couverture de code. Tout le reste a été fait par le livre, en écrivant les tests d'abord et en codant après les tests. Donc, ce serait bien d'avoir des tests pour ces conditions d'erreur aussi.
Il se trouve que je ne sais vraiment pas comment écrire des tests Rspec dans cette situation particulière, lorsque j'utilise exit
pour interrompre le traitement. Aucune suggestion?
Mise à jour => Cette gemme fait partie d'un "environnement de programmation" rempli de scripts bash. Certains de ces scripts doivent connaître exactement la condition d'erreur qui a interrompu l'exécution d'une commande pour agir en conséquence.
Qu'est-ce que vous voulez faire avec 'bash' exactement? – Inian
@Inian cette gemme fait partie d'un "environnement de programmation" qui a beaucoup de scripts bash. Certains de ces scripts doivent connaître les codes d'erreur renvoyés par cette interface de ligne de commande Ruby, afin qu'ils puissent agir en conséquence. –
Vous pouvez obtenir le code de retour de n'importe quelle commande en faisant '$?', Vous pouvez directement vérifier sa valeur pour la vérification de succès/échec. – Inian