Question

Je me demande comment valider les gens du pays passé à render modèle dans le contrôleur

Contrôleur:

def lelf_panel
  # ...
  if some_condition
    locals_hash = some_very_long_hash_A
  else
    locals_hash = some_very_long_hash_B
  end
  render :partial => "left_panel", :layout => false, :locals => locals_hash
end

Spec actuel:

it 'should render correct template for lelf_panel' do
  # ... 
  get 'left_panel'
  response.should render_template('system/_left_panel')
end   

Maintenant, je dois terminer Rcov pour ce contrôleur, alors je dois ajouter / modifier les spécifications pour couvrir les résultats « de some_condition ». et je veux validate « lelf_panel » habitants passaient à rendre, comme si je ne l'render_template valider, page partielle rendu pour les résultats sont les mêmes.

Je vérifie la 'render_template' dans rspec docs dans http://rubydoc.info/gems/rspec -rails / 2.8.1 / RSpec / Rails / Matchers / RenderTemplate: render_template

il fournit seulement et 2e params pour le message, alors comment puis-je tester les gens du pays passé à rendre?

Était-ce utile?

La solution

pour autant que je sache, il n'y a aucun moyen d'examiner directement la population locale pour un modèle de la façon que vous décrivez.

Vous pouvez changer locals_hash à @locals_hash puis examiner les résultats par cessionnaires (: locals_hash).

Ou, vous pouvez utiliser des sélecteurs sur le résultant HTML et vérifier que certains contenus indicatif est là -. Par exemple, si locals_hash affecte le titre de la page, de vérifier que le titre de la page HTML qui en résulte est ce que vous attendez

Autres conseils

Au lieu d'utiliser le matcher render_template, vous pouvez utiliser une attente sur l'objet du contrôleur.

it 'should render correct template for lefl_panel' do
  # ...
  allow(controller).to receive(:render).with no_args
  expect(controller).to receive(:render).with({
    :partial => 'system/_left_panel',
    :layout  => false,
    :locals  => some_very_long_hash_A
  })
  get 'left_panel'
end

Comme @ ryan-Ahearn 'de réponse avec des suggestions de @ user2490003' Commentaire de - mais tous mis en quelque chose de plus souple et RSpec 3

.
  # Safe to set globally, since actions can either render or redirect once or fail anyway
  before do
    allow(controller).to receive(:render).and_call_original
  end

  describe "get left panel" do
    before do
      # other setup
      get 'left_panel'
    end

    it 'should render correct template for lelf_panel' do
      # Sadly, render_template is primitive (no hash_including, no block with args, etc.)
      expect(subject).to render_template('system/_left_panel')
    end

    it 'should render with correct local value' do
      expect(controller).to have_received(:render) do |options|
        expect(options[:locals][:key_from_very_long_hash]).to eq('value_of_key_from_very_long_hash')
      end
    end
  end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top