2012-10-25 11 views
9

Nuovo per i test, sto facendo fatica a far passare alcuni test del controller.Errore controller Rspec in attesa di <"index"> ma rendering con <"">

Il seguente test di controllo genera l'errore:

expecting <"index"> but rendering with <""> 

Ho quanto segue in una delle mie specifiche del controller:

require 'spec_helper' 

    describe NasController do 

    render_views 
    login_user 

    describe "GET #nas" do 
     it "populates an array of devices" do 
     @location = FactoryGirl.create(:location) 
     @location.users << @current_user 
     @nas = FactoryGirl.create(:nas, location_id: @location.id)  
     get :index 
     assigns(:nas).should eq([@nas]) 
     end 

     it "renders the :index view" do 
     response.should render_template(:index) 
     end 
    end 

Nei miei macro del controller, ho questo:

def login_user 
    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     @current_user = FactoryGirl.create(:user) 
     @current_user.roles << Role.first 
     sign_in @current_user 
     User.current_user = @current_user 
     @user = @current_user 
     @ability = Ability.new(@current_user) 
    end 
    end 

Sto usando devise e cancan e ho seguito le loro guide. test. Credo che i miei utenti abbiano effettuato l'accesso e abbiano la possibilità di visualizzare l'azione dell'indice.

Cosa posso fare per far passare i test?

- UPDATE 1 -

Controller cod:

class NasController < ApplicationController 
    before_filter :authenticate_user! 
    load_and_authorize_resource 

    respond_to :js 

    def index 

    if params[:location_id] 
     ... 
    else 
    @nas = Nas.accessible_by(current_ability).page(params[:page]).order(sort_column + ' ' + sort_direction) 

    respond_to do |format| 
     format.html # show.html.erb 
    end  
    end 
    end 

risposta

14

penso che se si cambia

it "renders the :index view" do 
    response.should render_template(:index) 
end 

a

it "renders the :index view" do 
    get :index 
    response.should render_template(:index) 
end 

dovrebbe funzionare.

aggiornamento: provare questo

it "renders the :index view" do 
    @location = FactoryGirl.create(:location) 
    @location.users << @current_user 
    @nas = FactoryGirl.create(:nas, location_id: @location.id) 
    get :index 
    response.should render_template(:index) 
end 
+0

Ehi. Ciò fallisce ancora. Provato prima, ho anche provato a ripetere la creazione della posizione. Non capirlo Lo stesso test passa in un altro controller. – simonmorley

+0

È qualcosa nel controller che impedisce di visualizzare l'indice se la tabella naz è vuota? –

+0

No, e ho provato a rimuovere sia i filtri Idea che Cancan. E sostituendo la ricerca con @nas = Nas.all Per ogni evenienza. Frustrante! – simonmorley

1

sono riuscito a correggere questo errore da parte mia, ma nessuna idea se stiamo avendo lo stesso problema.

Nella mia configurazione, avevo una macro controller che passava attraverso ogni formato di risposta (html, js, json, ecc.) E verificava le specifiche in quel formato. Come un idiota, in realtà non avevo ancora un modello di risposta JSON per alcune delle mie specifiche, e non mi ero reso conto che questo avrebbe generato un errore se non fosse stato in grado di trovare il modello. Quindi quello era il mio problema.

Prova a specificare un formato nelle tue specifiche come di seguito, e scrivi solo un modello di simulazione denominato index.html nella cartella corretta e vedi se ottieni lo stesso errore.

get :index, :format => "html" 
+0

Grazie per il suggerimento. Ho provato ma questo non funziona per me. Vedrò se riesco a farlo funzionare su un altro controller e vedere le differenze. – simonmorley

+0

Almeno nel mio caso, questo era esattamente il problema, tranne che avevo bisogno di "js". – Karen

Problemi correlati