2010-11-22 6 views
4

Lorsque vous testez des messages Flash et des vues générées, si vous tester la sortie produite dans une langue:Ruby on Rails les meilleures pratiques dans les tests (les msgs flash et vues) et I18N

should_set_the_flash_to /Hello/i 

ou si vous apporter I18N dans vos tests:

should_set_the_flash_to I18n.t("sign_up.welcome") 

Il se pourrait que ma question est tout simplement pas la bonne question à poser ... ne hésitez pas à répondre avec un lien s'il y a déjà de bonnes explications sur la combinaison des tests et i18n ...

Mise à jour: mettez le bon code d'internationalisation après la réponse d'Arsen7, alors Arsen7!

Répondre

5

Cela dépend de ce que vous essayez de tester.

Si vous testez si le texte flash est "Bonjour", alors vous êtes sûr que vous savez ce que votre utilisateur verra. D'un autre côté, tester si le flash contient la même chose que ce que l'aide "t" renvoie pour une chaîne donnée est également logique parfois - par exemple lorsque votre fichier de traduction change souvent ou si son contenu est créé par quelqu'un d'autre, un peu plus tard.

Je, personnellement, toujours tester la traduction exacte exacte (assert_equal "Hello", flash[:message] genre de choses).

Il me assure que: 1) la traduction est satisfaisant, 2) la langue est reconnue correctement (vous ne voulez pas les messages polonais pour vos utilisateurs anglais, avez-vous)

Quant à la seconde partie? votre question:

Peut-être que "should_set_the_flash_to I18n.t("sign_up.welcome")" va fonctionner?

+0

Thx Arsen7! (J'ai mis à jour la question avec le code (de travail) I18n.t ("sign_up.welcome") –

+0

Peut-être que je devrais reformuler ma question en: comment séparer mon test en testant que la bonne vue ou le msg Flash est rendu (1), et que l'internationalisation fonctionne comme requis (2) et que les phrases clés sont correctement placées dans les fichiers locaux .yml? Il me semble que pour (1) je préfère choisir I18n.t ("sign_up.welcome") (pour ne pas casser le test quand je change de libellé) et pour (3) je choisirais assert_equal "Bonjour", flash [: message] Encore à gauche: existe-t-il un moyen de tester systématiquement que l'internationalisation fonctionne correctement sur tous les contrôleurs et Flash msgs? –

+0

Peut-être combiner deux lignes de test dans chaque vue que vous testez: 'should_set_the_flash_to" Bonjour "; assert_equal" Bonjour ", I18n.t (" key ")'? Vous serez averti lorsque le libellé change de façon inattendue, et vous saurez si le problème est dans la traduction changée ou dans la fausse clef. d disons que cela n'a pas d'importance si le I18n fonctionne, aussi longtemps que le texte sur la page rendue est correct. Testez l'effet, pas l'implémentation - si vous décidez un jour qu'au lieu de I18n vous utilisez une autre bibliothèque, votre test signalera toujours le succès (et ce sera bien). – Arsen7

Questions connexes