Устройство тестирования сбоев / ошибок Rspec и канкан

Я новичок в тестировании с помощью рельсов и, кажется, потерялся в мире тестирования. В настоящее время я тестирую свой контроллер приборной панели, и все проходит, когда я удаляю строку load_and_authorize_resource со своего контроллера. Я использую канкан для авторизации.

dashboard_controller.rb

def update
@dashboard = Dashboard.find(params[:id])

respond_to do |format|
  if @dashboard.update_attributes(params[:dashboard])
    format.html { redirect_to dashboards_path, notice: 'dashboard was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @dashboard.errors, status: :unprocessable_entity }
  end
end
end

dashboard_controller_spec.rb

require 'spec_helper'

describe DashboardsController do

  login_user
  before :each do 
    @dashboard = create(:dashboard, dashboard_name: "My Own Dashboard", id: 1)
  end

  describe "GET #index" do

    it "should have a current_user" do 
      subject.current_user.should_not be_nil
    end

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

    it "Creates new dashboard" do 
      get :new
      response.should render_template :new
    end

  end

  describe "Get #edit" do 

    it "assigns dashboard to @dashboard" do 
      get :edit, id: @dashboard
      assigns(:dashboard).should == @dashboard
    end

    it "renders the :edit template" do 
      get :edit, id: @dashboard
      response.should render_template :edit
    end

  end


end

Ошибка, которую я получаю из консоли

 1) DashboardsController Get #edit renders the :edit template
 Failure/Error: response.should render_template :edit
   expecting <"edit"> but rendering with <"">
 # ./spec/controllers/dashboard_controller_spec.rb:37:in `block (3 levels) in <top (required)>'

В любом случае, чтобы обойти эту ошибку, не удаляя load_and_authorize_resource в моем dashboard_controller?


person coletrain    schedule 28.11.2012    source источник
comment
У вас есть метод редактирования и индексации в вашем контроллере? Я спрашиваю, потому что вы не указали эти методы в коде вашего контроллера.   -  person Heena Hussain    schedule 28.11.2012
comment
Да, у меня есть метод редактирования, но это простой метод редактирования параметров поиска, поэтому я не включил его   -  person coletrain    schedule 29.11.2012


Ответы (1)


Тестировать контроллеры, когда задействован Devise, досадно сложнее. Вы не предоставляете свой код login_user, но я предполагаю, что он не охватывает все основы. Согласно официальная документация по Devise, вам нужно помочь, вместе с надзирателем, служебными методами Devise и т. д. Я бы повторил здесь, но это немного длиннее, и вы также можете перейти к источнику. Самая важная часть:

Спецификации контроллера не будут работать по умолчанию, если вы используете какой-либо из служебных методов devise.

Что касается rspec-rails-2.0.0 и devise-1.1, лучший способ включить devise в ваши спецификации - просто добавить следующее в spec_helper ...

Затем добавьте их образец controller_macros.rb и настройте некоторые другие вещи, и все будет хорошо. Однако обратите внимание, что тестирование спецификаций вашего контроллера отличается от спецификаций запросов на тестирование, и вы можете столкнуться с зависаниями в этом другом сценарии, который это решение не решает (см. Некоторые из моих собственных проблем и открытий на https://stackoverflow.com/a/13275366/9344).

person Ted    schedule 28.11.2012