2012-10-25 12 views
9

Nowością w testowaniu, próbuję przejść testy kontrolerów.Błąd kontrolera Rspec w oczekiwaniu na <"index">, ale renderowanie z <"">

Poniższe testy sterownik zgłasza błąd:

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

Mam następujący w jednym z moich specyfikacji Kontroler:

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 

W moich makr kontrolera, mam to:

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 

Używam urządzenia i cancan i śledziłem ich instrukcje. testowanie. Wierzę, że moi użytkownicy są wcześniej zalogowani i mają możliwość wyświetlenia akcji indeksu.

Co mogę zrobić, aby testy zdały egzamin?

- UPDATE 1 -

kod Kontroler:

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 

Odpowiedz

14

myślę, że jeśli zmieni

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

do

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

powinno działać.

zmiana: spróbuj tego

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

Hej. To wciąż się nie udaje. Wypróbowałem to wcześniej - również próbowałem powtórzyć tworzenie lokalizacji. Nie rozumiem tego. Ten sam test przechodzi w innym kontrolerze. – simonmorley

+0

Czy ich dane znajdują się w kontrolerze, które uniemożliwiają wywołanie indeksu, jeśli tabela naz jest pusta? –

+0

Nie, i próbowałem usunąć oba filtry devise i cancan. I zastępowanie znaleziska przez @nas = Nas.all Na wszelki wypadek. Denerwujący! – simonmorley

1

udało mi się naprawić ten błąd po mojej stronie, ale nie wiem, czy my mamy ten sam problem.

W mojej konfiguracji miałem makro kontrolera, które przechodziło przez każdy format odpowiedzi (html, js, json itp.) I testowało specyfikacje w tym formacie. Tak jak idiota, nie miałem jeszcze szablonu odpowiedzi na jsona dla niektórych moich specyfikacji, i nie zdawałem sobie sprawy, że spowoduje to błąd, jeśli nie będzie mógł znaleźć szablonu. Więc to był mój problem.

Spróbuj podać format w swoich specyfikacjach, jak poniżej, i po prostu napisz jakiś fałszywy szablon o nazwie index.html w odpowiednim folderze i sprawdź, czy otrzymujesz ten sam błąd.

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

Dzięki za sugestię. Próbowałem, ale to nie działa dla mnie. Zobaczę, czy uda mi się uruchomić go w innym kontrolerze i zobaczyć różnice. – simonmorley

+0

Przynajmniej w moim przypadku, to był dokładnie problem, z wyjątkiem tego, że potrzebowałem "js". – Karen

Powiązane problemy