Тестирование RSpec уничтожить действие контроллера выдает ошибку: ActionView :: MissingTemplate - PullRequest
0 голосов
/ 21 января 2019

Я пишу тесты для моего контроллера и получаю сообщение об ошибке ActionView::MissingTemplate. Я смотрел на связанные вопросы, которые задавались ранее, но мне не удается заставить его работать со своим сценарием.

Вот мой код контроллера:

def confirm_destroy
  render :layout => 'overlay'
end

def destroy
  @role.destroy
end

А вот тест, который я написал:

describe 'DELETE #destroy' do
  let!(:role) { create(:role, user: current_user) }
  let(:params) { {id: role.id, format: :json} }

  it 'performs a delete' do
    expect { delete :destroy, params }.to change { Role.count }.by(-1)
  end
end

когда я запускаю тест, я получаю ошибку:

 ActionView::MissingTemplate:
   Missing template company/settings/roles/destroy, application/destroy with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :slim]}. Searched in:
     * "/my_app/app/views"
     * "/usr/local/bundle/gems/devise-4.5.0/app/views"

Есть идеи, почему это так? Спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Когда действие контроллера destroy завершено, Rails пытается отобразить шаблон по умолчанию (представление), и он не определен, то есть у вас нет файла my_app/app/views/company/settings/roles/destroy.json.

У вас есть несколько вариантов исправленийit:

  1. Определите my_app/app/views/company/settings/roles/destroy.json и он будет обработан (не рекомендуется для JSON).
  2. Перенаправить на другое действие, например index (опять же, не рекомендуется для JSON).
  3. Рендеринг JSON или явное рендеринг ничего (см. Ниже)

-

# render nothing:
def destroy
  @role.destroy
  head :ok
end

# render json:
# render nothing:
def destroy
  @role.destroy
  render json: { deleted: true }, status: :no_content
end
...