RSpec View testing: Comment modifier les paramètres?
Je suis en train de tester mon point de vue avec RSpec. Le point de vue particulier qui est à l'origine de m'ennuis change son apparence en fonction d'un paramètre de l'url:
link_to "sort>name", model_path(:sort_by => 'name')
qui résultats dans http://mydomain/model?sort_by=name
Mon point de vue, puis utilise ce paramètre, comme ceci:
<% if params[:sort_by] == 'name' %>
<div>Sorted by Name</div>
<% end %>
RSpec ressemble à ceci:
it "should tell the user the attribute for sorting order" do
#Problem: assign params[:sort_for] = 'name'
render "/groups/index.html.erb"
response.should have_tag("div", "Sorted by Name")
end
Je voudrais tester mon point de vue (sans contrôleur) dans RSpec, mais je ne peux pas obtenir ce paramètre dans mon params
variable. J'ai essayé assign
dans toutes les différentes saveurs:
assign[:params] = {:sort_by => 'name'}
assign[:params][:sort_by] = 'name'
- ...
sans succès jusqu'à présent. Chaque idée est apprécié.
source d'informationauteur sebastiangeiger
Vous devez vous connecter pour publier un commentaire.
C'est parce que vous ne devriez pas être à l'aide de
params
dans vos vues.La meilleure façon dont je le vois à l'utilisation d'un helper.
Et dans un de vos fichiers d'aide
Alors, vous pouvez tester vos aides assez facilement (parce que dans les aides tests, vous pouvez définir la
params
demande.Si ses un contrôleur de test, il serait
Si ses un helper test alors ce serait:
Et son point de vue de test, il serait:
Si vous obtenez avertissement comme ci-dessous.
Vous pouvez le changer en
Le moyen le plus facile est de simplement faire ceci:
Mais en général, il est préférable d'être plus à l'intégration-y et pas "stub" valeurs lorsque c'est faisable. Donc, je préfère utiliser le contrôleur de tests avec integrate_views. Ensuite, vous pouvez spécifier vos paramètres à l' obteniret test de l'ensemble des flux de travaux, à partir de l'envoi de paramètres du contrôleur, que de les avoir traitées par le contrôleur, et enfin, pour le rendu.
J'ai aussi généralement préférable de sortir de la vue logique dans les accompagnateurs, qui peut être plus facile à tester.
Par exemple, dire que j'ai une aide appelée selection_listqui retourne une table de Hachage dont les "selected_preset" clé repose sur params[:selected_preset]et par défaut 42 si une valeur vide est spécifié pour le paramètre.
Voici un contrôleur de test où nous l'avons appelé integrate_views (vous pouvez bien sûr faire la même chose avec un réel test, si vous êtes dans que).
Ce test d'intégration va m'alerter si une partie de cette fonctionnalité les pauses. Mais j'ai aussi l'idéal serait d'avoir quelques unité tests pour m'aider à pinpoint que la rupture.
Je vais commencer par avoir de l'aide utiliser une variable d'instance, au lieu d'accéder directement à l'params. Je vais changer le code ci-dessus en ajoutant une seule ligne directement en dessous de l'obtenir, comme suit:
Maintenant je peut facilement effectuer une application d'assistance de l'unité de test:
Une autre méthode de vue de réglage params: