Désactiver le rendu lors du test d'un contrôleur
-
08-07-2019 - |
Question
J'utilise Test :: Unit avec shoulda pour tester un contrôleur.
Puisque je teste simplement le contrôleur, je ne veux pas que la vue soit rendue.
J'arrête certains objets, certaines erreurs sont générées lors du rendu de la vue, mais le test ne doit pas échouer car le contrôleur est correct.
Alors, y at-il un moyen de désactiver le rendu d’un modèle / vue à partir de mes tests?
J'ai entendu dire que rSpec fonctionnait comme ça.
La solution
Si vous utilisez du moka, c'est facile. Ajoutez-le à votre test individuel ou à votre méthode de configuration:
@controller.expects(:render)
Si vous ne l'êtes pas, utilisez Mocha.
gem install mocha
Ensuite, dans votre test_helper.rb
require 'mocha'
Autres conseils
Vous ne devriez pas vraiment voir de vue dans vos tests. Pouvez-vous publier votre code de test échoué? Les tests (fonctionnels) du contrôleur ne doivent vérifier que le déclenchement d'une action particulière lors de l'appel de votre action. C'est-à-dire qu'il devrait vérifier qu'il rend la vue correcte ou redirige vers une action différente. Vous pouvez également vérifier la configuration du flash ou d’autres variables pour la vue. Est-ce le type de ce que vous testez?
Voici un bon exemple de test d'une action show avec une requête get extraite de la documentation shoulda:
class UsersControllerTest < Test::Unit::TestCase
context "on GET to :show" do
setup { get :show, :id => 1 }
should_assign_to :user
should_respond_with :success
should_render_template :show
should_not_set_the_flash
should "do something else really cool" do
assert_equal 1, assigns(:user).id
end
end
end
Peut-être jetez-vous un coup d’œil sur guides sur les rails ce qui est très bon aussi.