Как да тествам действието си за унищожаване с RSpec?

В моето приложение Rails, ако user иска да изтрие собствения си акаунт, той първо ще трябва да въведе паролата си в моя terminate изглед:

<%= form_for @user, :method => :delete do |f| %>

  <%= f.label :password %><br/>
  <%= f.password_field :password %>

  <%= f.submit %>

<% end %>

Това е моят UsersController:

def terminate
  @user = User.find(params[:id])
  @title = "Terminate your account"
end

def destroy
  if @user.authenticate(params[:user][:password])
    @user.destroy
    flash[:success] = "Your account was terminated."
    redirect_to root_path
  else
    flash.now[:alert] = "Wrong password."
    render :terminate
  end
end

Проблемът е, че не мога да намеря начин да тествам това с RSpec.

Това, което имам е това:

describe 'DELETE #destroy' do

  before :each do
    @user = FactoryGirl.create(:user)
  end

  context "success" do

    it "deletes the user" do
      expect{ 
        delete :destroy, :id => @user, :password => "password"
      }.to change(User, :count).by(-1)
    end

  end

end

Това обаче ми дава грешка:

ActionView::MissingTemplate:
Missing template users/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder]}. Searched in:
* "#<RSpec::Rails::ViewRendering::EmptyTemplatePathSetDecorator:0x007fa7f51310d8>"

Може ли някой да ми каже какво пропускам тук или да предложи по-добър начин за тестване на това действие?

Благодаря за всяка помощ.


person Tintin81    schedule 22.10.2013    source източник
comment
възможен дубликат на Как може това действие за унищожаване да бъде тествано с RSpec?   -  person Tintin81    schedule 07.11.2013


Отговори (2)


Първото грешно, което сея, е:

В действието за унищожаване имате params[:user][:password], но в теста давате само params[:id] и params[:password]

в контролера създавате @user в before_filter?

person Adeptus    schedule 22.10.2013

Според Rspec документи Views are stubbed by default. Така че мисля, че трябва да добавите controller.prepend_view_path 'users/destroy' в тестовия метод.

person zishe    schedule 22.10.2013
comment
Благодаря, но за съжаление това не помогна. - person Tintin81; 23.10.2013
comment
Може би добавете controller.prepend_view_path 'app/views', не става ясно от документите. - person zishe; 23.10.2013