Test del controller RSpec - risposta vuota. Corpo


103

Sono bloccato con un problema durante il test dei miei controller con RSpec: la chiamata response.body restituisce sempre una stringa vuota. Nel browser tutto viene visualizzato correttamente e i test delle funzionalità di cetriolo sembrano farlo bene, ma RSpec fallisce ogni volta.

Altre aspettative sull'oggetto risposta, come response.should render_template('index')passare senza problemi.

Qualcuno di voi ha riscontrato questo problema prima? Forse la risposta html può essere ottenuta in qualche altro modo?

Per quanto riguarda le versioni, Rails 2.1.0, RSpec 1.2.7.

Risposte:


194

Per impostazione predefinita, rspec-rails entra in Rails per impedire che effettui il rendering dei modelli di visualizzazione. Dovresti solo testare il comportamento delle tue azioni e filtrare i test del controller, non il risultato del rendering del modello: è a questo che servono le specifiche di visualizzazione.

Tuttavia, se desideri che le specifiche del controller rendano i modelli come farebbe normalmente l'app, usa la render_viewsdirettiva:

describe YourController do
  render_views
  ...
end

2
Grazie, esattamente quello di cui avevo bisogno.
Toms Mikoss

2
Lavoro con Rails da anni e ora finalmente capisco la differenza tra le specifiche del controller e delle richieste. Grazie!
Brian Underwood


2

Mentre lavoravo con un problema simile (che mi ha portato a questa domanda), mi è venuto in mente che ci sono diversi modi per scuoiare lo stesso gatto. In altre parole, invece di controllare il corpo del testo, potresti essere in grado di controllare il contenuto del flash.

response.body.should =~ /Invalid email or password/

potrebbe essere un assegno equivalente a:

flash[:alert].should == "Invalid email or password"

A me quest'ultimo sembra un po 'più flessibile in quanto funzionerà in entrambi i casi, ma potrebbe non essere appropriato in tutti i casi.

Saluti,

John


2

Per impostazione predefinita, la configurazione RSpec-rails disabilita il rendering dei modelli per le specifiche del controller

Uno dei modi per risolvere questo problema è assicurarsi di abilitare l' render_viewsimpostazione nel rails_helper.rbfile. In questo modo, lo rendi in grado di funzionare globalmente in tutti i tuoi test.

RSpec.configure do |config|
  config.render_views
end

Oppure usa la dichiarazione render_views un singolo gruppo:

describe User do
  render_views
end

Puoi leggere di più su questo qui .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.